为方便观察已经适当换行:
\s*=\s* "(?<attrval>[^"]*)"|\s*=\s*'(?<attrval>[^']*)'|\s*=\s*(?<attrval><%#.*?%>)|\s*=\s*(?<attrval>[^\s="'/>]*)|(?<attrval>\s*?)
\w 字母、数字、下划线
\s 空白字符
(?<名称>表达式) 匹配表达式的结果,并给它命名
-----------------------------------------------------------
\G< \G不清楚(谁知道回下),以<开头
(?<tagname>[\w:\.]+) 取标签名:由\w、:和.组成,命名为tagname
(\s+ 多个空白
\s*=\s*"(?<attrval>[^"]*)" 匹配:="属性值",取属性值:不包含"的任意字符,命名为attrval| 或\s*=\s*'(?<attrval>[^']*)' 匹配:= '属性值',取属性值:不包含'的任意字符,命名为attrval| 或\s*=\s*(?<attrval><%#.*?%>) 匹配:= <%#非换行的任意字符%>,取属性值命名为attrval| 或\s*=\s*(?<attrval>[^\s="'/>]*) 匹配:= 不包含空白字符、=、"、'、/和>的任意字符,取属性值命名为attrval| 或(?<attrval>\s*?) 同上,只匹配空白
\G 表示匹配上一个匹配结束的地方,用于多次匹配
X,你这是什么东东,问题写清楚来。我是正则高手。
用 RegexBuddy 找到了更好的解: