我尝试使用正则表达式检查字符串数据。 输入数据的形式如下所示。
#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@
有效。
答案 0 :(得分:1)
@必须用至少一个组件{A,B,C}或更多来表示,空字符串也是有效的。
^(?:@[ABC]+)?$
+
重复前一个标记一次或多次,因此[ABC]+
匹配一个或多个A或B或C. ^
称为起始锚点,$
称为结束线锚。
<强>更新强>
^(?:#(?:@?[0-9]+[ABCXYZ])+)?$
答案 1 :(得分:0)
使用这个:
^(#(?:[0-9][A-Z])*@?(?:[0-9]|[A-Z])+)?$
我根据您的要求对其进行了测试:
@必须用至少一个分量表示[([0-9] +)A([0-9] +)B,([0-9] +)C]。
如果输入不是空字符串,则#必须存在于字符串前面。