正则表达,贪心|

时间:2014-08-02 14:47:41

标签: php regex regex-greedy

几个星期我在php中使用正则表达式。 现在我的问题是:有没有办法让RegEx贪婪|

例如主题:012345abcdefghijklm

模式:/(abcde|abcdefghi)/会提取abcde,但abcdefghi是更贪婪的匹配。

我找到的唯一方法是按可能匹配的最大长度对RegEx进行排序

谢谢

3 个答案:

答案 0 :(得分:2)

除了重新排序元素或添加可选的非捕获组之外别无他法。

正则表达式引擎非常渴望。由于交替元字符的工作方式(|)the first possible match exits the alternation clause

重新排序可能的选择(/(abcdefghi|abcde)/)或使用可选的非捕获组(/(abcde(?:fghi)?)/)。

答案 1 :(得分:0)

在这里你应该使用:

abcde(?:fghi)?

答案 2 :(得分:0)

不是一个完美的解决方案。但它提供了除排序之外的其他选择:

(abcde(?!fghi)|abcdefghi)