如何捕获这个可选的多行字符串?

时间:2013-07-21 17:53:14

标签: regex

我们如何捕获这个可选组? (我的意思是消耗多行) enter image description here

绿色组 - >可选组

红线 - >新细分(相同的模式重复)

我的模式:

(\t{2}<idx:entry name="dic">\r\n)(\t{4}<idx:orth>)(.+\r\n)(\t{4}<idx:infl>[^</idx:infl>]+)?

enter image description here

任何想法如何捕获这个没有固定长度的可选组?

2 个答案:

答案 0 :(得分:1)

试试这个:

\s*<idx:entry name="dic">\s*<idx:orth>[^<]*\s*(<idx:infl>\s*.*\s*</idx:infl>)

XML中忽略标记之间的空格,因此您不必在正则表达式中指定标签和换行符的确切数量。只需使用\s来表示空格(包括空格,制表符和换行符)。

抓取了()之间的所有内容,您可以使用\1$1访问此论坛,具体取决于您的正则表达式引擎。

但是,在解析XML时,使用正确的DOM解析器(如 XPath )通常会更好。

答案 1 :(得分:0)

我发现这有助于消费多行:

[\s\S]*</idx:infl>