正则表达式匹配需要在第一次出现文件扩展名时停止并忽略其余部分

Regex matching needs to stop at first occurrence of file extension and ignore rest

我正在尝试构建一个正则表达式查询,该查询将查找图像文件并忽略对子目录的查找。

检查以下字符串

/content/dam/dev-img-test-folder/huehuehue.gif/jcr:content/renditions/cq5dam.thumbnail.140.100.png

/content/dam/someotherdirectory/nonoono.gif/jcr:content/renditions/cq5dam.thumbnail.140.100.png


/content/dam/dev-img-test-folder/huehuehue.jpg
/content/dam/some-directory/nononoono.jpg

正则表达式应该只检测最后两个字符串。我尝试使用 /content/dam.*.(jpg|JPG|png),但这得到了所有四个。

有人可以在这里指导我正确的方向吗?谢谢。

/content/dam/[^/]*/[^/]*(jpg|JPG|png)$ 将匹配 dam 的任何子目录中以 jpg|JPG|png 结尾(由于 $)的所有文件。

如果您正在寻找可变数量的子目录,那将是一个不同的正则表达式。

.*\.(jpg|JPG|png)$ 应该匹配任何以 jpg|JPG|png.

结尾的行

/([^/]*/){2,5}[^/]*(jpg|JPG|png)$ 将匹配任何 2 到 5 个子目录深度的文件。您可能需要根据正则表达式转义括号 engine/syntax.

当您的数据有明确的分隔符时,例如本例中的 /,您可以使用 [^...]+ 来获取 除了 该字符之外的所有内容。如果将它与 $.

一起使用,这对于限制搜索深度非常有用

在您的情况下,\/content\/dam\/[^\/]+\/[^\/]+\.(jpg|JPG|png)$ 会起作用。此外,正则表达式通常不区分大小写。您的字符串中可能不需要 JPG

https://regex101.com/r/gGvRw3/2/