[英]How to non-greedy multiple lookbehind matches
Source: <prefix><content1><suffix1><prefix><content2><suffix2>
Engine: PCRE
RegEx1: (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2: (?<=<prefix>)(.*)(?=<suffix2>)
Result1: <content1>
Result2: <content1><suffix1><prefix><content2>
RegEx2所需的结果只是<content2>,但显然很贪心。 如何使RegEx2为非贪婪的,并仅使用最后一个匹配的Lookbehind?
[我希望我已经从NoteTab语法中正确翻译了此内容。 我没有做太多RegEx编码。 <prefix>,<content>和<suffix>术语仅用于表示任意字符串。 [?<=“ lookbehind命令中只有“ <”是有效的。]
我怀疑这很简单,但是经过太多小时的搜索,我放弃了自己解决问题。
谢谢您的帮助
艺术
我只是有同样的问题。 但就我而言
(?<=<prefix>)(?:.(?!<prefix>))*(?=<suffix>)
做到了我想要的。
该表达式将匹配<prefix>
和<suffix>
之间的字符串联的任何内容,并且不包含子字符串<prefix>
。 (我想是的。我不太擅长正则表达式。)
我建议您使用:
(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)
这样可以确保匹配项内没有<prefix>
。 完全匹配结果将为<content2>
在它前面放一些贪婪的东西?
(?:.*)(?<=<prefix>)(.*)(?=<suffix2>)
由于贪婪(?:.*)
会尽可能多地吞噬,因此模式的其余部分将仅匹配最小值-有效地使其余部分变得非贪婪。
非贪婪.*?
可能也可以:
(?<=<prefix>)(.*?)(?=<suffix2>)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.