正则表达式
[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 结尾的年份都失败了,但我不明白为什么。
PS我很讨厌RegEx,所以如果这里有明显的错误,请不要笑:-)
正则表达式
[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 结尾的年份都失败了,但我不明白为什么。
PS我很讨厌RegEx,所以如果这里有明显的错误,请不要笑:-)
您需要阅读一些正则表达式手册,例如perlretut。您使用的正则表达式包含多个缺陷:
/[0]/
最好写成/0/
././
将匹配任何字符(换行符除外)。要匹配文字点,您必须对其进行转义:/\./
./[1|2]/
,而是/[12]/
中间没有管道。如果将管道放在那里,它将匹配 3 个字符“1”、“2”或“|”之一。/[2000-2099]/
这样的字符类将匹配字符“0”、“1”(因为 0-2)、“2”或“9”之一。相反,您可以使用/20\d\d/
.h2h
由于这一点而失败:
[2000-2099]{4}
这真的是在说:
字符 2 或 0 之一200
0 到 2 范围内的字符0-2
然后是字符 0 或 9 之一099
为了匹配我怀疑你想要从 2000 到 2099 的 4 位数年份,请使用:
20\d\d