文件名的正则表达式验证失败

Regex validation of filename failing

我正在尝试验证包含字母 "CAT" 或 "DOG" 后跟 8 个数字并以“.TXT”结尾的文件名。

示例:

CAT20000101.TXT
DOG20031212.TXT

这不匹配:

ATA12330000.TXT
CAT200T0101.TXT
DOG20031212.TX1

这是我正在尝试使用的正则表达式:

(([A-Z]{3})([0-9]{8})([\.TXT]))\w+

为什么最后一节 (.TXT) 无法处理不匹配的文件扩展名?

参见示例:http://regexr.com/3a7fo

内部字符 class 没有正则表达式分组,因此 [\.TXT] 不正确。

您可以使用这个正则表达式:

^[A-Z]{3}[0-9]{8}\.TXT$

仅匹配 CATDOG 使用:

^(CAT|DOG)[0-9]{8}\.TXT$
  1. 去掉不必要的括号

[A-Z]{3}[0-9]{8}[\.TXT]\w+

  1. 失去 unnecessary/pattern-breaking 字符 class [] \.TXT

[A-Z]{3}[0-9]{8}\.TXT\w+

  1. 丢掉最后的\w+

[A-Z]{3}[0-9]{8}\.TXT

  1. [A-Z]{3} 更改为 (?:CAT|DOG)

(?:CAT|DOG)[0-9]{8}\.TXT

瞧。

它失败了,因为 \.TXT 在方括号中,它只匹配这四个字符中的一个。只需使用 (\.TXT).

将 [.TEXT] 周围的方括号删除为 .TEXT 您的示例修改了 http://regexr.com/3a7fu