繁体   English   中英

如何不贪心多个回溯匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM