与OR的懒惰正则表达式

时间:2011-08-16 17:25:54

标签: regex regex-greedy

我有以下形式的字符串:

greengrocerabc
sandwichcba
oscardcba

我想懒洋洋地匹配abcabcdabcde,所以我可以获得第一个组件。像

这样的东西
sub("^(.+)(abc|cba|dcba)", "\\1", "oscardcba") => "oscar"

但是,正则表达式OR贪婪匹配cba我得到oscard

我如何懒惰匹配此OR?语言是R,但它可以像grep或perl一样。

1 个答案:

答案 0 :(得分:4)

然后使量词非贪婪:

^(.+?)(abc|cba|dcba)

这样,捕获组将只包含最短的匹配(不包括abccbadcba)。

进一步阅读: