正则表达式验证序列

时间:2012-05-16 09:21:32

标签: c# java regex perl

我有一系列逗号分隔的单词,如x1,x2,x3 ....此序列中的某些单词可能是可选的,即序列x1,x3,x4,x6对x2和x5是可选的有效,并且其余的话是强制性的。上述顺序可以重复最多n次。

例如,单词x1,x2,x3的序列最多可重复3次,x2是可选的,以下是有效序列:x1,x3,x1,x2,x3,x1,x3

如何使用正则表达式模式验证上述内容?

我尝试过类似的东西  (,{0,1}x1,(x2,){0,1}x3,{0,1}){3} 但是如果我使用{1,3},那么上述将适用于所有三倍的倍数,那么任何重复次数都会匹配,因为它们是1 { 1 ,3}的倍数。

1 个答案:

答案 0 :(得分:2)

您的示例工作正常,但正如您所注意到的那样,您只检查目标字符串是否包含匹配的字符序列。您需要使用\A\z在字符串的开头和结尾锚定正则表达式,以确保整个字符串匹配。

此外,{0,1}更简单地写为?,并且当您不需要捕获时,捕获括号( ... )更好地写为非捕获括号(?: ... )子串。

尝试对正则表达式进行此修改,该正则表达式使用/x修饰符允许将无效的空格添加到表达式中以更好地进行布局。

m/ \A (?: x1, (?: x2, )? x3 ,? ){1,3} \z /x;