正则表达式匹配仅以3个~开头且后续无~的文件名问题
正则修正方案:匹配仅以3个波浪号开头的文件名
修正后的正则表达式
(?:^|\/)\~{3}[^~\/]*$
正则各部分说明
(?:^|\/):匹配字符串开头或路径分隔符/,确保3个波浪号是文件名的起始位置(避免文件名中间出现3个波浪号的情况被误匹配)\~{3}:精确匹配3个波浪号,严格限定开头的波浪号数量[^~\/]*:匹配任意数量(含0个)既不是波浪号也不是路径分隔符的字符,确保文件名后续内容不再包含波浪号$:匹配字符串结尾,确保整个文件名部分完全符合规则
匹配验证
- 符合要求(匹配成功):
- 单独文件名:
~~~abcd.txt - 带路径的文件名:
a/b/c/d/~~~abcd.txt
- 单独文件名:
- 不符合要求(匹配失败):
- 开头仅2个波浪号:
~~helloworld.txt - 开头超过3个波浪号:
~~~~1234.txt - 后续包含波浪号:
~~~ab~cd.txt - 波浪号不在文件名开头:
a/b/abc~~~def.txt
- 开头仅2个波浪号:
原正则的问题分析
\~{1,3}允许匹配1-3个波浪号,导致仅1或2个波浪号开头的文件名被错误匹配[^/]*仅排除了路径分隔符/,未排除波浪号~,因此开头有超过3个波浪号的文件名(如~~~~1234.txt)会被前3个波浪号+后续的波浪号及其他字符匹配成功
内容的提问来源于stack exchange,提问作者Asdfg
相关产品推荐
相关产品推荐

