Java 正则表达式中的逻辑或

Java 正则表达式中的逻辑或,java,regex,Java,Regex,我想使用java正则表达式测试以下情况: AB->允许 AC->允许 ABC->允许 A->禁止 以下是A、B和C正则表达式: 答:([0-9]{1,3})(\[0-9]{1,3}) B:(\+([0-1](\.[0-9]{1,3})) C:([0-1](\[0-9]{1,3})) 那么,如何使用逻辑OR创建正则表达式呢 解决方案 ^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}

我想使用java正则表达式测试以下情况:

  • AB->允许
  • AC->允许
  • ABC->允许
  • A->禁止
以下是A、B和C正则表达式:

  • 答:
    ([0-9]{1,3})(\[0-9]{1,3})
  • B:
    (\+([0-1](\.[0-9]{1,3}))
  • C:
    ([0-1](\[0-9]{1,3}))
那么,如何使用逻辑OR创建正则表达式呢

解决方案

^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3})))))$
几种解决方案:

  • 照你说的写:
    AB | AC | ABC

  • 避免冗余:
    A(BC?C)
    A(B?C?B)


  • 您可以将
    B
    C
    正则表达式与
    +
    -
    放在字符类中组合,并使用以下正则表达式:

    ^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}‌​))(\-([0-1](\.[0-9]{1,3})))))$
    
    在这种情况下,总是有
    A
    ,之后是
    B
    C
    BC

    说明:

    您的正则表达式将是
    AB
    AC
    ABC
    ,因此在
    A
    之后,您希望
    B
    C
    BC
    可以在字符类中创建
    B
    C

    ([-+]([0-1](\.[0-9]{1,3}))
    
    然后使用pip(
    |
    )作为前面选项和
    BC
    之间的逻辑or,即:

    (\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3}))
    

    使用由
    |
    运算符分隔的三个模式。要匹配
    AB
    AC
    ,只需将
    B
    C
    放在非捕获组中,两个模式都由交替运算符分隔

    (([0-9]{1,3})(\.[0-9]{1,3})?)(\+([0-1](\.[0-9]{1,3}))(-([0-1](\.[0-9]{1,3}))|(([0-9]{1,3})(\.[0-9]{1,3})?)(?:(\+([0-1](\.[0-9]{1,3}))|(-([0-1](\.[0-9]{1,3})))
    |<-----------------------------------ABC----------------------------------->|<------------AB or AC----------------------------------------------------------->
    
    ([0-9]{1,3})(\.[0-9]{1,3})(\+([0-1](\.[0-9]{1,3})([0-1](\.[0-9]{1,3});([0-9]{1,3})(\.[0-9]{1,3})(?:(\+([0-1](\.[0-9]{1,3})(\.[0-9]{1,3})1})
    ||
    
    当字符串同时使用+is first-is时,顺序很重要second@Athanor因此,如果你觉得这个答案很有用,你可以通过投票和接受答案来告诉社区;)我正在测试,你会尽快得到反馈(我有括号问题…)你的解决方案有效,下面是缺少括号的正则表达式:
    ^(([0-9]{1,3})(\.[0-9]{1,3})([-+]([0-1](\.[0-9]{1,3})))(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3}])$