我希望你准备用正则表达式解析XML.
首先,让我们定义XML标签的样子!
<tag_name?(optional space (then whatever that doesnt end with "/"))>(whatever)</?(optional space)tag_name>
<tag_name?(optional space)/>
Run Code Online (Sandbox Code Playgroud)
要匹配其中一个标记,我们可以使用以下正则表达式:
/<[^ \/>]++ ?\/>|<([^ \>]++) ?[^>]*+>.*?<\/ ?\1>/s
Run Code Online (Sandbox Code Playgroud)
显然,没有标签会嵌套在我们的第二种XML标签中.那么我们的两级嵌套正则表达式将是:
/<([^ \>]++) ?[^>]*+>.*?(?:<([^ \>]++) ?[^>]*+>.*?<\/ ?\2>|<[^ \/>]++ ?\/>).*?<\/ ?\1>/s
Run Code Online (Sandbox Code Playgroud)
现在让我们应用一些递归魔法(希望你的正则表达式引擎支持递归(并且还没有崩溃)):
/<([^ \>]++) ?[^>]*+>(.*?(?:<([^ \>]++) ?[^>]*+>(?:[^<]*+|(?2))<\/ ?\3>|<[^ \/>]++ ?\/>).*?)<\/ ?\1>/s
Run Code Online (Sandbox Code Playgroud)
完成 - 正则表达式应该做.
不认真,试一试.
我从w3schools XML教程中偷了一个XML文件片段并用我的正则表达式尝试了,我.xml从aliteralmind 的问题中复制了一个Maven项目,并用我的正则表达式尝试了它.最适合使用重度嵌套的元素.
img http://gyazo.com/d1db416abf92b0123539c274386f9f31.png
干杯.