0

我正在尝试验证字符串是否匹配某个模式:

#:XY1:XY2:ABC:::xy::

该部分#:XY1是必需的,后面的字段和分隔符是可选的。但是,如果存在第三个字段,则它必须是ABC. 我正在尝试这样:

^#:[^:]+:?([^:]+)?:?(ABC)?:?([^:]*:?)*$

但它也匹配行,这些行并不完全具有ABC第三个字段。

4

2 回答 2

3

请试试这个:

^#((((:[^:]+))((:[^:]*))?)|((((:[^:]+))(:[^:]*))((:(ABC)?)(:[^:]*)*)?))$
于 2012-06-04T21:00:57.647 回答
0

您可以使用如下表达式:

(?x) ^#:[^:]+  (?: :[^:]+  (?: :ABC  (?: :[^:]* )*  )?  )? $

尽管如此,使用其他编程结构可能会更好(更具可读性)。Perl 示例:

my @l = split /:/, '#:XY1:XY2:ABC:::xy::';
if($l[0] eq '#' && $l[3] eq 'ABC'){
    # do stuff
}
于 2012-06-01T09:31:50.760 回答