regex - 正则表达式 - 文件名与所需模式不匹配
问题描述
试图找出为什么这个文件名与这个正则表达式模式不匹配:
- 文件名:
file.txt
- 图案:
^(([a-zA-Z0-9_-])+[[.]{1}([a-zA-Z0-9])+]{1})$
我允许名称和只有一个文件扩展名:
对于我使用的名称:
([a-zA-Z0-9_-])+
它是任意数量的字母、数字、下划线和破折号。对于我使用的扩展名:
[[.]{1}([a-zA-Z0-9])+]{1}
这只是一个扩展名,只有一个点后跟字母或数字。
扩展模式是失败的模式,我不明白为什么。
测试用例:
- 这些文件名应该通过:
file.txt
,fi-le.t7t
- 这些文件名不应通过:
file.txt.doc
,file.
,file
(最后一个,无扩展名)
解决方案
试试这个:
^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9]+)$
您只需将一个术语括在括号中(
,并且)
如果您真的希望正则表达式引擎捕获它们(这样您就可以从匹配中获取它们的值)。如果你不需要捕获它们,你只是想查找一段文本是否匹配,你可以从这个正则表达式中去掉括号。
[.]
您可以简单地使用反斜杠转义敏感字符,而不是使用略显笨拙的外观来表示文字句点字符: \.
。
此外,默认情况下,正则表达式将期望一个序列只匹配一次,因此您不需要遵循一个术语,{1}
因为这是默认设置。
而且我不确定您打算将完全包含在方括号中的术语[
和.]
[a-zA-Z0-9_-]