< matches the character < literally (case sensitive)
\w+
matches any word character (equal to [a-zA-Z0-9_])
+Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
Match a single character not present in the list below
[^>]*?
*?Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
> matches the character > literally (case sensitive)
> matches the character > literally (case sensitive)
1st Capturing Group
((?R)|[^<]+)*
*Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data
1st Alternative
(?R)
(?R)recurses the entire pattern
2nd Alternative
[^<]+
Match a single character not present in the list below
[^<]+
+Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
< matches the character < literally (case sensitive)
< matches the character < literally (case sensitive)
\/ matches the character / literally (case sensitive)
\w+
matches any word character (equal to [a-zA-Z0-9_])
+Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
> matches the character > literally (case sensitive)
Global pattern flags
g modifier:global. All matches (don't return after first match)
s modifier:single line. Dot matches newline characters