2013-01-17 49 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 
相关问题