几个星期我在php中使用正则表达式。
现在我的问题是:有没有办法让RegEx贪婪|
?
例如主题:012345abcdefghijklm
模式:/(abcde|abcdefghi)/
会提取abcde
,但abcdefghi
是更贪婪的匹配。
我找到的唯一方法是按可能匹配的最大长度对RegEx进行排序
谢谢
答案 0 :(得分:2)
除了重新排序元素或添加可选的非捕获组之外别无他法。
正则表达式引擎非常渴望。由于交替元字符的工作方式(|),the first possible match exits the alternation clause。
重新排序可能的选择(/(abcdefghi|abcde)/
)或使用可选的非捕获组(/(abcde(?:fghi)?)/
)。
答案 1 :(得分:0)
在这里你应该使用:
abcde(?:fghi)?
答案 2 :(得分:0)
不是一个完美的解决方案。但它提供了除排序之外的其他选择:
(abcde(?!fghi)|abcdefghi)