%
^
\s*
( # <1>
# Single tags like
<
\s*
[a-zA-Z:]+
(?:
\s*[a-zA-Z:]*
\s* = \s*
(?:'[^']*'|"[^"]*")
)*
\s*
/\s*
>
|
# Tags in pairs like content
<
\s*
([a-zA-Z:]+) # <2/>
(?:
\s*[a-zA-Z:]*
\s* = \s*
(?:'[^']*'|"[^"]*")
)*
\s*
>
(?:[^<>]* | (?1))*
<\s*/\s*\2\s*>
) # 1>
\s*
$
%x