我正在解析一个简短的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)