这是一个通用的正则表达式问题,我也找不到答案。
假设我有一些输入字符串:
...A-A-B...
...B-A-A...
...A-B-A...
...B-B-A...
我有两个分隔符A
和B
。我想要做的是找到其中任何一个,然后寻找另一个。现在我知道我可以做(A.*B)|(B.*A)
,这将匹配我想要的所有四个字符串。
我还可以(A|B).*\1
A-A
匹配第一个和第二个字符串,A-B-A
代表第三个字符串,B-B
代表最后一个字符串。
我可以按照(A|B).*[^\1]
的说法做一些事情来说,找到两个令牌中的一个,然后找到另一个令牌吗?
对于上下文,我对此感兴趣是因为this question,其中A
和B
是用于货币匹配的点或逗号,但我认为这可能在很多上下文,因此是一般性问题。
答案 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