正则表达式-文件名与所需的模式不匹配

时间:2019-03-08 16:18:10

标签: regex

试图弄清楚为什么该文件名不匹配此正则表达式模式:

  • 文件名:file.txt
  • 模式:^(([a-zA-Z0-9_-])+[[.]{1}([a-zA-Z0-9])+]{1})$

我允许使用名称,并且只允许使用一个文件扩展名:

  • 为我使用的名称: ([a-zA-Z0-9_-])+ 可以是任意数量的字母,数字,下划线和破折号。

  • 对于扩展名,我使用以下命令: [[.]{1}([a-zA-Z0-9])+]{1} 这只是一个扩展名,它只有一个点,后跟字母或数字。

扩展模式是一种失败的模式,我不明白为什么。

测试用例:

  • 这些文件名应通过:file.txtfi-le.t7t
  • 这些文件名不应通过:file.txt.docfile.file(最后一个,无扩展名)

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9]+)$

如果您确实希望正则表达式引擎捕获这些术语,则只需要在括号()中加上一个术语即可(因此您可以从匹配项中获取它们的值)。如果您不需要捕获它们,只想查找一段文本是否匹配,就可以删除该正则表达式中的括号。

您可以使用反斜杠[.]来转义敏感字符,而不必使用看起来有点笨拙的\.来表示文字字符。

此外,默认情况下,正则表达式将期望序列完全匹配一次,因此您无需在{1}后面加上一个术语,因为这是默认值。

我不确定用完全括在方括号[]中的术语来表达您的意图,但是只有在要创建字符类时才需要使用方括号(定义一组可接受的字符),例如您现有的[a-zA-Z0-9_-]