正则表达式
[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。我在RegEx吮吸,所以如果这里有一个明显的错误,不要笑: - )
答案 0 :(得分:4)
您需要阅读一些正则表达式手册,例如perlretut。您使用的正则表达式包含多个缺陷:
/[0]/
中只包含一个字符的字符类最好简写为/0/
。/./
将匹配任何字符(换行符除外)。要匹配文字点,您必须将其转义:/\./
。/[1|2]/
,而是/[12]/
而不会将管道放在中间。如果您将管道放在那里,它将匹配3个字符'1','2'或'|'中的一个。/[2000-2099]/
,因为这样的字符类将匹配其中一个字符'0','1'(因为0-2),' 2'或'9'。相反,您可以使用/20\d\d/
。H2H
答案 1 :(得分:1)
因为这一点而失败:
[2000-2099]{4}
真正说的是:
200
0-2
然后来自099
为了匹配,因为我怀疑你想要从2000年到2099年使用4位数:
20\d\d