Source: <prefix><content1><suffix1><prefix><content2><suffix2>
Engine: PCRE
RegEx1: (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2: (?<=<prefix>)(.*)(?=<suffix2>)
Result1: <content1>
Result2: <content1><suffix1><prefix><content2>
RegEx2的理想结果只是&lt; content2&gt;但显然很贪心。 如何使RegEx2非贪婪并仅使用最后匹配的lookbehind?
[我希望我已经从NoteTab语法中正确翻译了这个。我不这样做 很多RegEx编码。 &lt;前缀&gt;,&lt;内容&gt; &安培; &LT;后缀GT;术语只是表示任意字符串。只有“&lt;”在“?&lt; =”lookbehind命令中很重要。]
我怀疑它很简单,但经过几个小时的搜索我就是这样 放弃自己解决它。
感谢您的帮助
技术
答案 0 :(得分:2)
我建议您使用:
(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)
这可确保匹配中不存在<prefix>
。完整的匹配结果为<content2>
答案 1 :(得分:2)
我遇到了同样的问题。但就我而言,它是
(?<=<prefix>)(?:.(?!<prefix>))*(?=<suffix>)
这就是我想要的。
此表达式将匹配<prefix>
和<suffix>
之间字符串联的任何内容,并且不包含子字符串<prefix>
。 (我想是的。我不是很擅长正则表达式。)
答案 2 :(得分:1)
把一些贪婪的东西放在它面前?
(?:.*)(?<=<prefix>)(.*)(?=<suffix2>)
由于贪婪的(?:.*)
会尽可能地吞噬,只有最小值才能与模式的其余部分相匹配 - 有效地使其余部分不贪婪。
非贪婪的.*?
也可能有效:
(?<=<prefix>)(.*?)(?=<suffix2>)