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

时间:2018-05-22 04:43:12

标签: regex regular-language

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

检查以下字符串

/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),但这得到了所有四个。

有人可以指引我到正确的方向吗?谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

.*\.(jpg|JPG|png)$应匹配以jpg|JPG|png结尾的任何行。

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

答案 1 :(得分:1)

如果您的数据有明确的分隔符,例如/,则可以使用[^...]+获取之外的所有内容。如果您将其与$一起使用,那么限制搜索深度非常有用。

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

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