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