我正在尝试编写一个正则表达式来递归匹配路径中的任何点文件。我从:
^[.]
但这与long/path/here/.dotfile
的情况不符.此外,它本身与.
匹配,这是不正确的。正则表达式应与.
匹配,然后至少需要一个字符。
^/?(?:w+/)*(.w+)
^
- 表示字符串
的开头 /?
- 在/
之前的可能性 (?:w+/)*
- 非捕获组,用于查找子目录路径的 0-INF 匹配项(例如 long/path/.../
) (.w+)
- 捕获组以获取以 .
开头的路径末尾的任何文件
正则表达式测试
我能想到的方式是 2 个正则表达式
-
^[.]
匹配根目录中不以.
开头的任何内容 -
(?<=/).
匹配与/
后跟.
匹配的任何子目录。
测试用例:
.foo
foo.a
/a/.foo
/a/foo.a
/.foo/.asdafsdf
@m_callens答案中,带有空格或破折号或非英语字符的路径将失败。
^/?(?:[^/]+/)*(.[^/]+)$
-
^
- 匹配开始 -
/?
- 0 或 1/
-
(?:[^/]+/)*
-
*
- 0 或更多 -
(?:)
- 非捕获组 -
[^/]+/
- 1 个或多个不/
,末尾有一个/
-
-
(.[^/]+)
- 捕获组,1 个或多个未/
,开头带有.
-
$
- 匹配结束
您可以在此处测试此正则表达式
/home/ddddd/hhhhh/gfg-u556u asdf 雪 、 asdf asdf/demo-project/demo- —— _ (1)-project new copy /src/imgs/ツ/.DS_Store