正则表达式验证序列
Posted
技术标签:
【中文标题】正则表达式验证序列【英文标题】:Regex validate sequence 【发布时间】:2012-05-23 20:07:37 【问题描述】:我有一系列逗号分隔的单词,例如 x1,x2,x3.... 这个序列中的一些单词可能是可选的,即序列 x1,x3,x4,x6 是有效的,x2 和 x5 是可选的,并且其余的词是强制性的。上述序列最多可重复 n 次。
例如,单词x1,x2,x3的序列最多可以重复3次,其中x2是可选的,以下是一个有效的序列:x1,x3,x1,x2,x3,x1,x3
如何使用正则表达式模式验证上述内容?
我尝试过类似的东西
(,0,1x1,(x2,)0,1x3,0,1)3
但是以上内容适用于所有三的倍数,如果我使用 1,3 那么任何数量的重复都将匹配,因为它们是 1 1,3 的倍数。
【问题讨论】:
您能否提供更多示例序列,包括有效的和无效的?示例:您对递增顺序的数字是否严格? 【参考方案1】:您的示例运行良好,但正如您所注意到的,您只检查目标字符串 是否包含 匹配的字符序列。您需要使用\A
和\z
在字符串的开头和结尾锚正则表达式,以确保整个字符串匹配。
另外,0,1
更简单地写为?
,当您不需要捕获子字符串时,捕获括号( ... )
最好写为非捕获括号(?: ... )
。
尝试对您的正则表达式进行这种修改,它使用/x
修饰符允许将无关紧要的空格添加到表达式中以更好地布局。
m/ \A (?: x1, (?: x2, )? x3 ,? )1,3 \z /x;
【讨论】:
很好的答案,但正则表达式会产生一些误报:例如,x1,x2,x3x1,x2,x3
(注意缺少逗号连接到两个子序列)。您可以使用交替来指定逗号或字符串结尾,而不是使最后的逗号可选:(?: , | \z)
。以上是关于正则表达式验证序列的主要内容,如果未能解决你的问题,请参考以下文章