2009-12-29 106 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

不在規範中。 ;) –

相關問題