在路径中匹配文件名的正则表达式

3

我正在尝试匹配路径中的文件名。例如:

/path/test/index.html

我想要匹配 index.html 不过路径中也可能没有 /,所以路径可能是

index.html

我希望匹配index.html

我有以下内容来匹配第一种情况,并可以通过一个组进行抓取。

.*/([^/]+)

但是,当路径中只有文件名时,我该如何匹配文件名呢?

在进行匹配时,需要注意仅有的路径为文件名的情况。

你在用什么编程语言?这可能不适合使用正则表达式。 - Andy Lester
3个回答

4

除非您想匹配整行并且您的引擎匹配器要求如此,否则可能没有必要使用除[^/]+$以外的任何内容。


1
通常有多种方法可以使用正则表达式,而且常常会有边缘情况使得简单的任务变得复杂。
如果你想在字符串中匹配任何/每个有效的文件名,也许可以这样做:
[A-Za-z0-9_-]+\.?[A-Za-z0-9]*

或者(因为你可以有一个名为ConfigurationFile.txt.bac的文件,例如)...
[A-Za-z0-9_-\.]+\.?[A-Za-z0-9]*

但这并不是你想要的,因为每个目录名称都是有效的文件名...所以...这将仅匹配具有扩展名的有效文件名。
[A-Za-z0-9_-]+\.[A-Za-z0-9]+

或者

[A-Za-z0-9_-\.]+\.[A-Za-z0-9]+

显然有很多选项。AA(被接受的答案)仅匹配路径末尾的任何字符串,而不匹配没有路径的文件名。AA可能对OP有用。能够匹配字符串中的任何文件名对我很有帮助。
总是存在边缘情况,例如在我的情况下,我仍然使用此正则表达式匹配版本号。我有一个解决方法,但我变得过于具体。

0
.*/ 转换为可选组:
(?:.*/)?([^/]+)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接