2013-01-17 78 views
0

正則表達式任何人都可以解釋爲什麼這個正則表達式失敗?

[a-z0-9]{1,10}_([0]?[1-9]|[1][0-2])([0]?[1-9]|[1|2][0-9]|[3][0|1])([2000-2099]{4}).cta$ 

此字符串失敗

abscriprod_01152013.cta 

此字符串工作

abscriprod_11152012.cta 

看來,任何一年中3-8結束失敗了,但我不明白爲什麼。

P.S.我吸的正則表達式,所以如果有一個明顯的錯誤在這裏,不笑:-)

回答

4

您需要閱讀一些正則表達式手冊,例如perlretut。您使用的正則表達式中包含多個漏洞:

  1. 字符類,它僅包含一個字符作爲/[0]/更好簡寫爲/0/
  2. A /./將匹配任何字符(除了換行符)。要匹配字面點,你必須逃避它:/\./
  3. 應該匹配'1'或'2'的字符類別可能不會被寫入/[1|2]/,而是/[12]/而中間沒有管道。如果您將管道放在那裏,它將匹配3個字符'1','2'或'|'中的一個。
  4. 要匹配2000到2099範圍內的數字,不得使用/[2000-2099]/,因爲這樣的字符類將與字符'0','1'(由於0-2),'2'或'9'。相反,你可以使用/20\d\d/

h2h

1

它失敗,因爲該位:

[2000-2099]{4} 

這實際上是說:

之一從0-2

然後一個字符0的或9從字符2或0從200

取值範圍爲0的字符至

要匹配,因爲我懷疑你想有一個4位數的年份2000年至2099年使用:

20\d\d 
相關問題