如何表达“至少有一个组件”

时间:2015-01-28 01:15:45

标签: regex

我尝试使用正则表达式检查字符串数据。 输入数据的形式如下所示。

#1X2Y3Z@4A5B6C (valid)
<--nothing (valid)
#1X2Y3Z (valid)
#@4A (valid)

#4A@ (invalid) 

@后必须至少有一个符合([0-9]+)A([0-9]+)B([0-9]+)C

的组件

如果输入不是空字符串,#必须是第一个字符。

我写了这个正则表达式:

#(([0-9]+)X)?(([0-9]+)Y)?(([0-9]+)Z)?@(([0-9]+)A)?(([0-9]+)B)?([0-9]+)C)?

但它认为#1X2Y3Z@有效。

2 个答案:

答案 0 :(得分:1)

  

@必须用至少一个组件{A,B,C}或更多来表示,空字符串也是有效的。

^(?:@[ABC]+)?$

+重复前一个标记一次或多次,因此[ABC]+匹配一个或多个A或B或C. ^称为起始锚点,$称为结束线锚。

<强>更新

^(?:#(?:@?[0-9]+[ABCXYZ])+)?$

DEMO

答案 1 :(得分:0)

使用这个:

^(#(?:[0-9][A-Z])*@?(?:[0-9]|[A-Z])+)?$

我根据您的要求对其进行了测试:

  

@必须用至少一个分量表示[([0-9] +)A([0-9] +)B,([0-9] +)C]。

     

如果输入不是空字符串,则#必须存在于字符串前面。