bash 正则表达式 "find anything between last slash and dot"

bash regexp "find anything between last slash and dot"

源字符串是一个路径,比方说

/home/test/test/filename.ext

我需要从路径匹配 filename 并在 BASH_REMATCH

中捕获它

我试了上百个数字,真是泪流满面,最接近的是

/[^/]*.$

但它只匹配 filename.ext

\/([a-zA-Z0-9]+)\.

但它匹配 /filename。

谢谢

您可以使用:

s='/home/test/test/filename.ext'
[[ "$s" =~ /([^./]+)\. ]] && echo "${BASH_REMATCH[1]}"
filename

你应该使用结束锚

([^/]+)\.[^/.]+$  

然后文件名在第 1 组中。