<Head>
<Post>value</Post>
<PstlAdr>
<Ctry>…</Ctry>
<AdrLine>line1</AdrLine>
<AdrLine>line2</AdrLine>
<AdrLine>line3</AdrLine>
<AdrLine>line4</AdrLine>
</PstlAdr>
</Head>
我想捕获FIRST AdrLine标记和LAST / AdrLine标记之间的所有文本。
表示捕获的组将包含:
<AdrLine>line1</AdrLine>
<AdrLine>line2</AdrLine>
<AdrLine>line3</AdrLine>
<AdrLine>line4</AdrLine>
答案 0 :(得分:1)
XML 不 a Regular Language因此无法通过常规表达式进行解析(除非您使用的是已知的XML子集,您可以使用用正则表达式解析)。改为使用XML解析器。
答案 1 :(得分:1)
我完全同意RegExp不是解析XML文件的最佳解决方案。
但如果你愿意,并且完全确定你的数据格式,请使用:
#(?:<AdrLine>.+?</AdrLine>\s*)+#
RegExp101演示:https://regex101.com/r/hoikwl/1
答案 2 :(得分:0)
根据定义,正则表达式不允许递归。 (允许递归的构造被称为 - 或等同于 - pushdown automata;示例是context-free grammar)。
由于HTML和XML具有递归结构,因此在一般情况下不能使用正则表达式解析HTML。
但是,如果你在一个非常有限的结构上行动,你可以尝试匹配所有<AdrLine>
标签,只需拔出Java中的第一个和最后一个匹配项。但是,你必须有一个非常严格的结构。