^start of line
Non-Capturing Group(?:(?<!\/\/|\/\*|<!--).)* *repeats the group contents below any number of times:
Negative Lookbehind(?<!\/\/|\/\*|<!--) \/the literal / (4710 / 578 / 2F16)
\/the literal / (4710 / 578 / 2F16)
\/the literal / (4710 / 578 / 2F16)
\*the literal * (4210 / 528 / 2A16)
<!--the literal text <!-- .any character (except for line terminators)
Comment:check if commented out
a-zone character from a (9710) to z (12210) (case insensitive)
Character Class[a-z0-9]*? *?matches any number of characters from the set below:
a-zone character from a (9710) to z (12210) (case insensitive)
0-9one character from 0 (4810) to 9 (5710)
\ban ASCII word boundary
Comment:find start of a tag
Non-Capturing Group(?:.(?![^?]>))+ +repeats the group contents below at least once:
.any character (except for line terminators)
Negative Lookahead(?![^?]>) Negated Character Class[^?] ?the literal ? (6310 / 778 / 3F16)
>the literal > (6210 / 768 / 3E16)
Comment:Must not find > between start and class unless ?>
class=the literal text class= (case insensitive) "the literal " (3410 / 428 / 2216)
'the literal ' (3910 / 478 / 2716)
Comment:Find class and opening quotes
Non-Capturing Group(?:(?!\1).)* *repeats the group contents below any number of times:
\1the text saved by group 1
.any character (except for line terminators)
\ban ASCII word boundary
matchthe literal text match (case insensitive) \ban ASCII word boundary
Non-Capturing Group(?:(?!\1).)* *repeats the group contents below any number of times:
\1the text saved by group 1
.any character (except for line terminators)
Comment:see if our tag is in between the quotes
\1the text saved by group 1
Comment:closing quotes
.*any character (except for line terminators), repeated any number of times
Negative Lookbehind(?<!\?) \?the literal ? (6310 / 778 / 3F16)
Comment:find first > without ? in front of it
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string
U modifier: Ungreedy. Quantifiers are lazy by default. A trailing ? makes a quantifier greedy
i modifier: insensitive. Matches without distinguishing uppercase and lowercase letters
x modifier: extended. Ignores unescaped whitespace and comments outside character classes