2009-12-29 49 views
1

我想要一个正则表达式来验证形式AABBAAA的输入,其中A是字母(a-z,A-Z),B是数字(0-9)。所有的As必须是一样的,所以Bs也一样。正则表达式验证数字和字母序列

+4

以防万一你以前没去过那里http://www.regular-expressions.info/ –

回答

6

如果所有一个的和的都应该是一样的,我觉得这样做的唯一的办法是:

([a-zA-Z])\1([0-9])\2\1\1\1 

在哪里\ 1\ 2是指第一和第二括号组。但是,我不认为所有的正则表达式引擎都支持这一点。

+0

+1反向引用,至少支持基本和扩展POSIX RE和Perl。虽然可能*不是*提问者想要什么,这是对问题的有效解读。 – pilcrow

+0

是的。这样'AB12CDE'将不会匹配,但'AA11AAA'会;我怀疑这是OP想要的,但它可能是。 –

6

它确实没有你想象的那么难;你已经掌握了大部分的语法。

[a-zA-Z]{2}[0-9]{2}[a-zA-Z]{3} 

的数字在括号({})告诉多少次前一个字符匹配或字符集,所以匹配[a-zA-Z]两次,[0-9]两次,[a-zA-Z]三次。

 
编辑:如果你想确保匹配的字符串不是一个更长字符串的一部分,你可以使用word boundaries;只需添加\b的正则表达式的两端:

\b[a-zA-Z]{2}[0-9]{2}[a-zA-Z]{3}\b 

现在 “Ab12Cde” 会一致,但 “YZ Ab12Cde FG” 不会。

 
编辑2:现在,这个问题已经改变,backreferences是做的唯一途径。 edsmilde的答案应该有效;但是,您可能需要添加词边界以获得最终解决方案。

\b([a-zA-Z])\1([0-9])\2\1\1\1\b 
+0

你也可以用'\ d {2}'代替'[0-9] {2}',取决于你的喜好。 – kejadlen

+5

这是否应该停止,以禁止BBAABBAAABB? – pilcrow

+0

不在规范中。 ;) –

相关问题