如何使正则表达式返回所有可能性?

时间:2015-07-24 20:21:42

标签: regex grep

我有一个CSV,其列可以是0,1或空。假设一行有这个:

0,1,,,,1,0

我想提取“[01],+ [01]”正则表达式的所有可能性,即:

0,1
1,0
1,,,,1

不幸的是,该正则表达式只返回0,1和1,0,因为“1”不能被另一场比赛“重用”。

是否可以使用正则表达式执行此类操作?如果您可以使用grep的regexp样式回答它会很棒,但任何(在Linux上都有效)都可以。

1 个答案:

答案 0 :(得分:1)

你不能用grep或pcregrep做到这一点,因为你需要的模式必须使用前瞻,你需要提取一个捕获组,而不是整个匹配。

事实是你不能从字符串中的相同位置或已经消耗的字符中获得几个完整匹配(因为正则表达式引擎总是前进并在最后匹配的字符之后进行新的尝试)。所以诀窍是使用零宽度断言,在其中放置一个捕获组(零宽度断言不消耗字符,它只是一个测试):

(?=([01],+[01]))

不幸的是,pcregrep无法返回除整个匹配之外的其他内容,因此您需要使用Perl或任何其他语言来获取捕获组内容。

demo