^start of string
Non-Capturing Group(?:(?!\/p).)* *repeats the group contents below any number of times:
Negative Lookahead(?!\/p) \/the literal / (4710 / 578 / 2F16)
pthe literal p (11210 / 1608 / 7016) (case sensitive)
.any character
<p>the literal text <p> (case sensitive) Non-Capturing Group(?:(?!\/p).)* *repeats the group contents below any number of times:
Negative Lookahead(?!\/p) \/the literal / (4710 / 578 / 2F16)
pthe literal p (11210 / 1608 / 7016) (case sensitive)
.any character
\[the literal [ (9110 / 1338 / 5B16)
calloutthe literal text callout (case sensitive) \]the literal ] (9310 / 1358 / 5D16)
.*?any character, repeated any number of times
\[the literal [ (9110 / 1338 / 5B16)
\/the literal / (4710 / 578 / 2F16)
calloutthe literal text callout (case sensitive) \]the literal ] (9310 / 1358 / 5D16)
.*?any character, repeated any number of times
<the literal < (6010 / 748 / 3C16)
\/the literal / (4710 / 578 / 2F16)
p>the literal text p> (case sensitive) Non-Capturing Group(?:[^<>]*<p>.*?<\/p>){2} {2}repeats the group contents below exactly 2 times:
Negated Character Class[^<>]* *matches any number of characters outside the set below:
<the literal < (6010 / 748 / 3C16)
>the literal > (6210 / 768 / 3E16)
<p>the literal text <p> (case sensitive) .*?any character, repeated any number of times
<the literal < (6010 / 748 / 3C16)
\/the literal / (4710 / 578 / 2F16)
p>the literal text p> (case sensitive) Negated Character Class[^<]* *matches any number of characters outside the set below:
<the literal < (6010 / 748 / 3C16)
\Kresets the starting point of the reported match. Any previously consumed characters are no longer included in the final match
g modifier: global. Finds all matches instead of stopping after the first
s modifier: single line. Allows a dot to match line terminators