试图弄清楚为什么该文件名不匹配此正则表达式模式:
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
(最后一个,无扩展名)答案 0 :(得分:2)
尝试以下方法:
^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9]+)$
如果您确实希望正则表达式引擎捕获这些术语,则只需要在括号(
和)
中加上一个术语即可(因此您可以从匹配项中获取它们的值)。如果您不需要捕获它们,只想查找一段文本是否匹配,就可以删除该正则表达式中的括号。
您可以使用反斜杠[.]
来转义敏感字符,而不必使用看起来有点笨拙的\.
来表示文字字符。
此外,默认情况下,正则表达式将期望序列完全匹配一次,因此您无需在{1}
后面加上一个术语,因为这是默认值。
我不确定用完全括在方括号[
和]
中的术语来表达您的意图,但是只有在要创建字符类时才需要使用方括号(定义一组可接受的字符),例如您现有的[a-zA-Z0-9_-]
。