>我有这样的字符串
<tag1>
<tag1>
any text
</tag1>
text
</tag1>
我想找到一个<tag1>
,其中包含此字符串中的最短文本。
我使用了以下正则表达式<tag1>.*?</tag1>
,但不是<tag1>any text</tag1>
而是<tag1> <tag1>any text</tag1>
.下面是示例。
为什么它不起作用,我做错了什么?
您可以使用此简单代码来解决您的特定问题:
<tag1>[^<]*</tag1>
它不起作用,因为它会在第一个<tag1>
开始匹配,然后尽可能少地匹配,所以在第一个</tag1>
结束,导致" <tag1> <tag1>any text</tag1>
"。
可以通过使用否定字符类来避免匹配标记
<tag1>[^<>]*</tag1>
在正则表达式上看到它。
另一种可能性是使用否定的前瞻断言,如果下一个字符不是标记,则仅匹配下一个字符。
(<tag1>)((?!1).)*?</tag1>
在正则表达式上看到它
如果这些标签没有嵌套在它们自己(同一个标签)中,我将能够帮助你。
使用正则表达式做这种事情通常是一个坏主意。您应该获得合适的解析器来满足您的要求。