使用RegEx查找两个XML标记之间的所有内容

Doz*_*Doz 54 php java regex xml perl

RegEx,我想找到标签和两者之间的所有内容XML tags,如下所示:

<primaryAddress>
    <addressLine>280 Flinders Mall</addressLine>
    <geoCodeGranularity>PROPERTY</geoCodeGranularity>
    <latitude>-19.261365</latitude>
    <longitude>146.815585</longitude>
    <postcode>4810</postcode>
    <state>QLD</state>
    <suburb>Townsville</suburb>
    <type>PHYSICAL</type>
</primaryAddress>
Run Code Online (Sandbox Code Playgroud)

我想找到标签和之间的所有内容primaryAddress,并将其删除.

primaryAddress标签之间的所有内容都是变量,但我希望每当我得到时删除整个标签和子标签primaryAddress.

任何人都知道如何做到这一点?

Ωme*_*ega 113

使用正则表达式进行HTML/XML解析不是一个好主意...

但是,如果您仍想执行此操作,请搜索正则表达式模式

<primaryAddress>[\s\S]*?<\/primaryAddress>
Run Code Online (Sandbox Code Playgroud)

并用空字符串替换它...

  • 出于好奇心的缘故:为什么使用正则表达式进行HTML/XML解析不是一个好主意? (6认同)
  • @G_G &gt;&gt; http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 (6认同)
  • Omega,我只想获得关于正则表达式的通用信息,我只是说我使用textmate来回应人们标记我的问题,因为使用RegEx是个坏主意.我知道这是一个坏主意,但我在不同的背景下使用它. (3认同)
  • 以防万一你不认识它,`*?` 表示匹配直到`&lt;/primaryAddress&gt;` 第一次出现的所有内容(非贪婪匹配)。如果您的文件中有多个 `&lt;primaryAddress&gt;` 元素,这一点很重要。谢谢,@Ωmega。 (3认同)
  • @Ωmega同意正则表达式和xml不是最好的朋友.但是,我只是通过我的IDE(IntelliJ IDEA)用空行替换40-50个标签,在你的回答的帮助下大约5秒钟.在这些情况下,这个正则表达式和xml可能很有用. (3认同)

dou*_*arp 15

你应该能够匹配: /<primaryAddress>(.+?)<\/primaryAddress>/

标签之间的内容将位于匹配的组中.


sam*_*man 6

使用此方法不好,但是如果您真的想用正则表达式拆分它

<primaryAddress.*>((.|\n)*?)<\/primaryAddress>
Run Code Online (Sandbox Code Playgroud)

经过验证的答案将返回标签,但这仅返回标签之间的值。


Val*_*len 5

这可以捕获大多数最外层标签对,即使属性位于侧面或没有结束标签

(<!--((?!-->).)*-->|<\w*((?!\/<).)*\/>|<(?<tag>\w+)[^>]*>(?>[^<]|(?R))*<\/\k<tag>\s*>)
Run Code Online (Sandbox Code Playgroud)

编辑:如上面评论中所述,正则表达式始终不足以解析xml,尝试修改正则表达式以适应更多情况只会使其更长,但仍然无用