RegEx用于具有固定值的分隔字段

时间:2012-06-01 09:24:24

标签: regex

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

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

部分#:XY1是必需的,之后的字段和分隔符是可选的。但如果存在第三个字段,则必须为ABC。我这样想:

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

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

2 个答案:

答案 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
}