2
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 语法正确地翻译了这个。我不做太多正则表达式编码。<prefix>、<content> 和 <suffix> 术语只是用来表示任意字符串。只有“?<=”lookbehind 命令中的“<”才有意义。]

我怀疑这很简单,但经过太多小时的搜索,我放弃了自己解决它。

谢谢您的帮助

艺术

4

3 回答 3

5

我建议你使用:

(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)

这样可以确保<prefix>匹配内部没有。完整的比赛结果将是<content2>

于 2009-08-05T10:16:53.680 回答
4

把贪婪的东西放在它前面?

(?:.*)(?<=<prefix>)(.*)(?=<suffix2>)

由于贪婪(?:.*)将尽可能多地吞噬,因此只有最小值将与模式的其余部分匹配 - 有效地使其余部分不贪婪。

非贪婪.*?也可能起作用:

(?<=<prefix>)(.*?)(?=<suffix2>)
于 2009-08-05T09:57:28.947 回答
4

我只是有同样的问题。但在我的情况下

(?<=<prefix>)(?:.(?!<prefix>))*(?=<suffix>)

那做了我想要的。

此表达式将匹配任何介于<prefix>and<suffix>和 之间的字符连接且不包含 substring 的内容<prefix>。(我想是的。我不太擅长正则表达式。)

于 2010-03-27T01:28:07.320 回答