正则表达式所有行,包括第一次出现之间的匹配

时间:2019-10-15 20:13:46

标签: regex regex-lookarounds regex-greedy

我正在解析一个简短的XML文件,该文件需要获取公共标记之间的所有内容,该公共标记包括在子代中某个位置的特定字符串。

<animals>
    <dog>
    </dog>
    <cat>
    </cat>
</animals>
<animals>
    <dog>
    </dog>
    <cat CATCHME>
    </cat>
</animals>

如果“抓到我”动物块是前面的块,那么我可以使用类似的东西

(?<=\<animals>)([\S\s]*?.*CATCHME.*[\S\s]*?)(?=\<\/animals)

但是,如果前面有块,则后向搜索不会在最后一次出现时停止,而是包括直到第一次出现的所有内容。如果只是一行,那么.*?贪婪的位会起作用,但[\S\s]*?不会起作用

我意识到我可以逐行解析文件,而不使用正则表达式,但是我正在寻找一种简单的解决方案,以解决与工作无关的性能问题。

预期(期望):

<animals>
    <dog>
    </dog>
    <cat CATCHME>
    </cat>
</animals>

实际:

(everything up to the very first occurrence of "animals" and not the most recent)

0 个答案:

没有答案