文件名的正则表达式验证失败
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)
无法处理不匹配的文件扩展名?
内部字符 class 没有正则表达式分组,因此 [\.TXT]
不正确。
您可以使用这个正则表达式:
^[A-Z]{3}[0-9]{8}\.TXT$
仅匹配 CAT
和 DOG
使用:
^(CAT|DOG)[0-9]{8}\.TXT$
- 去掉不必要的括号
[A-Z]{3}[0-9]{8}[\.TXT]\w+
- 失去 unnecessary/pattern-breaking 字符 class
[]
\.TXT
[A-Z]{3}[0-9]{8}\.TXT\w+
- 丢掉最后的
\w+
[A-Z]{3}[0-9]{8}\.TXT
- 将
[A-Z]{3}
更改为 (?:CAT|DOG)
。
(?:CAT|DOG)[0-9]{8}\.TXT
瞧。
它失败了,因为 \.TXT
在方括号中,它只匹配这四个字符中的一个。只需使用 (\.TXT)
.
将 [.TEXT] 周围的方括号删除为 .TEXT
您的示例修改了 http://regexr.com/3a7fu
我正在尝试验证包含字母 "CAT" 或 "DOG" 后跟 8 个数字并以“.TXT”结尾的文件名。
示例:
CAT20000101.TXT
DOG20031212.TXT
这不匹配:
ATA12330000.TXT
CAT200T0101.TXT
DOG20031212.TX1
这是我正在尝试使用的正则表达式:
(([A-Z]{3})([0-9]{8})([\.TXT]))\w+
为什么最后一节 (.TXT)
无法处理不匹配的文件扩展名?
内部字符 class 没有正则表达式分组,因此 [\.TXT]
不正确。
您可以使用这个正则表达式:
^[A-Z]{3}[0-9]{8}\.TXT$
仅匹配 CAT
和 DOG
使用:
^(CAT|DOG)[0-9]{8}\.TXT$
- 去掉不必要的括号
[A-Z]{3}[0-9]{8}[\.TXT]\w+
- 失去 unnecessary/pattern-breaking 字符 class
[]
\.TXT
[A-Z]{3}[0-9]{8}\.TXT\w+
- 丢掉最后的
\w+
[A-Z]{3}[0-9]{8}\.TXT
- 将
[A-Z]{3}
更改为(?:CAT|DOG)
。
(?:CAT|DOG)[0-9]{8}\.TXT
瞧。
它失败了,因为 \.TXT
在方括号中,它只匹配这四个字符中的一个。只需使用 (\.TXT)
.
将 [.TEXT] 周围的方括号删除为 .TEXT 您的示例修改了 http://regexr.com/3a7fu