如何捕获两件事中的一件,然后另外两件事

时间:2013-09-05 23:54:25

标签: regex

这是一个通用的正则表达式问题,我也找不到答案。

假设我有一些输入字符串:

...A-A-B...
...B-A-A...
...A-B-A...
...B-B-A...

我有两个分隔符AB。我想要做的是找到其中任何一个,然后寻找另一个。现在我知道我可以做(A.*B)|(B.*A),这将匹配我想要的所有四个字符串。

我还可以(A|B).*\1 A-A匹配第一个和第二个字符串,A-B-A代表第三个字符串,B-B代表最后一个字符串。

我可以按照(A|B).*[^\1]的说法做一些事情来说,找到两个令牌中的一个,然后找到另一个令牌吗?

对于上下文,我对此感兴趣是因为this question,其中AB是用于货币匹配的点或逗号,但我认为这可能在很多上下文,因此是一般性问题。

2 个答案:

答案 0 :(得分:3)

否定前瞻可以做到。

(A|B).*(?!\1)(A|B)

答案 1 :(得分:3)

您可以使用条件:

(?:(A)|B).*?(?(1)B|A)

(?(1)B|A)是一个IF..THEN..ELSE,意思是:如果是第1组,那么B其他A

注意:这不适用于java,javascript和GO,但适用于Perl,PHP,Python,Ruby,.net