我正在尝试验证字符串是否与某种模式匹配:
#:XY1:XY2:ABC:::xy::
部分#:XY1
是必需的,之后的字段和分隔符是可选的。但如果存在第三个字段,则必须为ABC
。我这样想:
^#:[^:]+:?([^:]+)?:?(ABC)?:?([^:]*:?)*$
但它也匹配行,它们并不完全具有ABC
作为第三个字段。
答案 0 :(得分:3)
请试试这个:
^#((((:[^:]+))((:[^:]*))?)|((((:[^:]+))(:[^:]*))((:(ABC)?)(:[^:]*)*)?))$
答案 1 :(得分:0)
您可以使用如下表达式:
(?x) ^#:[^:]+ (?: :[^:]+ (?: :ABC (?: :[^:]* )* )? )? $
尽管使用其他编程结构可能会更好(更易读)。 Perl例子:
my @l = split /:/, '#:XY1:XY2:ABC:::xy::';
if($l[0] eq '#' && $l[3] eq 'ABC'){
# do stuff
}