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

Regex 如何捕获两件事中的一件,然后捕获两件事中的另一件,regex,Regex,这是一个通用的正则表达式问题,我也找不到答案 假设我有几个输入字符串: ...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]的行做些什么,比如说,找到两个令牌中的一个,然后

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

假设我有几个输入字符串:

...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]的行做些什么,比如说,找到两个令牌中的一个,然后找到另一个令牌吗


就上下文而言,我之所以对此感兴趣是因为,其中A和B是货币匹配的点或逗号,但我认为这在很多上下文中都很有用,因此这是一个通用问题。

消极前瞻可以做到这一点

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

消极前瞻可以做到这一点

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

您可以使用条件语句:

(?:(A)|B).*?(?(1)B|A)
?1B | A是IF..THEN..ELSE,表示:如果组1,则B ELSE A


注意:这不适用于java、javascript和GO,但适用于Perl、PHP、Python、Ruby、.net。您可以使用以下条件:

(?:(A)|B).*?(?(1)B|A)
?1B | A是IF..THEN..ELSE,表示:如果组1,则B ELSE A


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

谢谢。很好用!谢谢你。很好用!抱歉,我向上投票给你,但选择了另一个,因为它在任何地方都有效。但有条件的东西可能很酷。谢谢@唯一适用于所有地方的答案是rmmh答案。对不起,我给了你更高的票数,但选择了另一个,因为它适用于所有地方。但有条件的东西可能很酷。谢谢@唯一适用于任何地方的答案是rmmh答案。