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 结尾的年份都失败了,但我不明白为什么。

PS我很讨厌RegEx,所以如果这里有明显的错误,请不要笑:-)

4

2 回答 2

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

于 2013-01-17T15:38:27.743 回答
1

由于这一点而失败:

[2000-2099]{4}

这真的是在说:

字符 2 或 0 之一200

0 到 2 范围内的字符0-2

然后是字符 0 或 9 之一099

为了匹配我怀疑你想要从 2000 到 2099 的 4 位数年份,请使用:

20\d\d
于 2013-01-17T15:33:08.767 回答