我有一个像这样的字符串
<tag1>
<tag1>
any text
</tag1>
text
</tag1>
我希望找到一个<tag1>
,其中包含此字符串中的最短文本。
我使用了以下正则表达式<tag1>.*?</tag1>
,而不是<tag1>any text</tag1>
我得到<tag1> <tag1>any text</tag1>
。这是example。
为什么它不起作用,我做错了什么?
答案 0 :(得分:1)
您可以使用此简单代码来解决您的具体问题:
<tag1>[^<]*</tag1>
答案 1 :(得分:0)
如果这些标签没有嵌套在自己内部(相同的标签),我将能够帮到你。
使用正则表达式执行此类操作通常是个坏主意。你应该得到一个合适的解析器来满足你的要求。
答案 2 :(得分:0)
它不起作用,因为它会在第一个<tag1>
开始匹配,然后尽可能匹配,因此在第一个</tag1>
结束,从而产生“<tag1> <tag1>any text</tag1>
”。
您可以使用否定的character class
来避免匹配代码<tag1>[^<>]*</tag1>
另一种可能性是使用否定的lookahead assertion并仅匹配下一个字符,如果它不是标记。
(<tag1>)((?!\1).)*?</tag1>