2010-11-24 34 views
1

我需要一個正則表達式的字符串中的任何格式相匹配:如何編寫正則表達式以匹配AAAA00000000-0000?

  1. 「AAAA00000000」
  2. 「AAAA00000000-0000」
  3. 「0000000000」

我已經得到了第一個和第三個模式的權利,這是我想出了

^(([a-zA-Z]{4}[0-9]{8})|([0-9]{10}))$ 

我不能得到那個工作包括第二種模式。

+0

`[0-9] {10}`從哪裏來?是否也應該匹配「0000000000」(沒有前導字母)? – jensgram 2010-11-24 14:45:36

+0

是的,請參閱更新 – dom 2010-11-24 14:47:31

+0

好的,請參閱更新:) – jensgram 2010-11-24 14:48:59

回答

5
^[a-zA-Z]{4}[0-9]{8}(-[0-9]{4})?$ 

即,XXXXnnnnnnnn可選-nnnn一部分。

  • XXXXnnnnnnnn
  • XXXXnnnnnnnn-nnnn

你可以離開了最外面的括號,因爲這組等於整場比賽(捕獲組0)。

編輯
更新匹配nnnnnnnnnn,太:

^[0-9]{10}|[a-zA-Z]{4}[0-9]{8}(-[0-9]{4})?$ 

匹配:

  • nnnnnnnnnn
  • XXXXnnnnnnnn
  • XXXXnnnnnnnn-nnnn

編輯#2
對此發表評論,這是最短/最可讀的,我能煮了:

^[0-9]{10}|[a-zA-Z]{4}[0-9]{8}(-[0-9]{4}|)$ 

特性同上面剛。

0

^\ w {4} \ d {8}( - \ d {4})?$

修正了一個錯字

0

你缺少了 「 - 」 第二格式...

0
^[a-zA-Z]{4}([0-9]{8}|[0-9]{8}\-[0-9]{4})$