1

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

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

...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],找到两个令牌中的一个然后找到另一个令牌吗?

对于上下文,我对此很感兴趣,因为这个问题,在哪里AB是用于货币匹配的点或逗号,但我认为这在很多情况下可能很有用,因此是通用问题。

4

2 回答 2

3

负前瞻可以做到这一点。

(A|B).*(?!\1)(A|B)
于 2013-09-05T23:58:01.617 回答
3

您可以使用条件:

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

(?(1)B|A)是一个 IF..THEN..ELSE 并且意味着:如果组 1 则 B 否则 A

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

于 2013-09-06T00:17:18.847 回答