我想使用java regex测试以下情况:
以下是A,B和C正则表达式:
(([0-9]{1,3})(\.[0-9]{1,3})?)
(\+([0-1](\.[0-9]{1,3}))
(-([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})))))$
答案 0 :(得分:1)
几种解决方案:
按照您的说法书写:AB|AC|ABC
避免冗余:A(BC?|C)
或A(B?C|B)
答案 1 :(得分:1)
您可以将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
之间进行以下操作:
(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3}))
答案 2 :(得分:0)
使用由|
运算符分隔的三种模式。要匹配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----------------------------------------------------------->