正则表达式
[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结尾的年份都会失败,但我看不出原因。
另外,我的RegEx很烂,所以如果这里有一个明显的错误,不要笑:-)
发布于 2013-01-17 23:38:28
您需要阅读一些正则表达式手册,例如perlretut。您使用的正则表达式包含多个缺陷:
因为/0/.
/./可以匹配任何字符(换行符除外),所以简单地编写只包含一个字符的字符类(如在/[0]/中)会更好。为了匹配文字点,你必须对它进行转义:应该匹配'1‘或'2’的/\./.
/[1|2]/,而是写成/[12]/,中间没有竖线。如果将管道放在那里,它将匹配3个字符“1”、“2”或“|”中的一个。
/[2000-2099]/,因为这样的字符类将匹配字符“0”、“1”(由于0-2)、“2”或“9”中的一个。相反,您可以使用/20\d\d/.h2h
发布于 2013-01-17 23:33:09
它失败是因为下面这一点:
[2000-2099]{4}这实际上是在说:
200中的字符2或0之一
0-2中0到2范围内的字符
然后是099中的一个字符0或9
为了匹配我怀疑您想要一个从2000到2099的4位数年份,请使用:
20\d\dhttps://stackoverflow.com/questions/14382361
复制相似问题