Source: <prefix><content1><suffix1><prefix><content2><suffix2>
Engine: PCRE
RegEx1: (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2: (?<=<prefix>)(.*)(?=<suffix2>)
Result1: <content1>
Result2: <content1><suffix1><prefix><content2>
Run Code Online (Sandbox Code Playgroud)
RegEx2 的期望结果只是 <content2> 但它显然是贪婪的。如何使 RegEx2 不贪婪并仅使用最后一个匹配的lookbehind?
[我希望我从 NoteTab 语法正确翻译了这个。我不做太多的 RegEx 编码。<prefix>、<content> 和 <suffix> 术语仅用于表示任意字符串。只有“?<=”lookbehind 命令中的“<”是重要的。]
我怀疑这很简单,但经过太多小时的搜索,我放弃了自己解决。
谢谢您的帮助
艺术
前面放个贪心的东西?
(?:.*)(?<=<prefix>)(.*)(?=<suffix2>)
Run Code Online (Sandbox Code Playgroud)
由于贪婪(?:.*)会尽可能多地吞噬,因此只有最小值会与模式的其余部分匹配 - 有效地使其余部分变得非贪婪。
非贪婪.*?也可能有效:
(?<=<prefix>)(.*?)(?=<suffix2>)
Run Code Online (Sandbox Code Playgroud)
我建议你使用:
(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)
Run Code Online (Sandbox Code Playgroud)
这确保<prefix>了比赛中不能有任何内容。完整的比赛结果将是<content2>
小智 5
我刚刚遇到了同样的问题。但就我而言,它是
(?<=<prefix>)(?:.(?!<prefix>))*(?=<suffix>)
Run Code Online (Sandbox Code Playgroud)
这就是我想要的。
<prefix>此表达式将匹配和之间的字符串联<suffix>且不包含子字符串的任何内容<prefix>。(我想是的。我不太擅长正则表达式。)
| 归档时间: |
|
| 查看次数: |
7862 次 |
| 最近记录: |