正则表达式中的逻辑OR

时间:2015-04-22 13:59:57

标签: java regex

我想使用java regex测试以下情况:

  • AB - >允许
  • AC - >允许
  • ABC - >允许
  • A - >禁

以下是A,B和C正则表达式:

  • A:(([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})))))$

3 个答案:

答案 0 :(得分:1)

几种解决方案:

  1. 按照您的说法书写:AB|AC|ABC

  2. 避免冗余:A(BC?|C)A(B?C|B)

答案 1 :(得分:1)

您可以将BC正则表达式与+-放在一个字符类中,并使用以下正则表达式:

^(([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,之后会有BCBC

解释:

您的正则表达式将为ABACABC,因此A BCBC之后您可以通过将BC放在字符类中来创建+-

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

然后使用pip(|)作为逻辑或在前面的选项和BC之间进行以下操作:

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

答案 2 :(得分:0)

使用由|运算符分隔的三种模式。要匹配ABAC,只需将BC放入非捕获组中,两种模式都由交替运算符分隔。

(([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----------------------------------------------------------->
相关问题