给定一个示例文本:
sometext /uploads/01/03/file.jpgmoretext and then some /uploads/44/93/anotherfile.png and yet /uploads/03/26/somefile.jpg
但这是从第一个/上传到最后的.jpg提取我想提取3个文件...我怎么说“关闭扩展”?我尝试了“/uploads.*(.jpg)”的正则表达式|jpeg格式|巴布亚新几内亚|gif)”预期3个结果,但得到一个长结果。
9jyewag01#
因为你的.*是贪婪的,它会匹配到最后一次出现。添加一个?使它不贪婪会有帮助。你应该在OR组中的每个扩展部分添加点,以避免错误的结果
.*
?
/uploads.*?(\.jpg|\.jpeg|\.png|\.gif)
演示:regex101
**编辑:**一个更干净的正则表达式来匹配OP评论中的多个扩展名情况`:
\/uploads.*?(?:\.jpg|\.jpeg|\.png|\.gif)+
ukdjmx9f2#
您可以使用\S*?以非贪婪的方式只匹配非空格字符,并将模式缩短为前面带有点\.(?:jpe?g|png|gif)的交替
\S*?
\.(?:jpe?g|png|gif)
/uploads\S*?\.(?:jpe?g|png|gif)
Regex demo
2条答案
按热度按时间9jyewag01#
因为你的
.*
是贪婪的,它会匹配到最后一次出现。添加一个?
使它不贪婪会有帮助。你应该在OR组中的每个扩展部分添加点,以避免错误的结果演示:regex101
**编辑:**一个更干净的正则表达式来匹配OP评论中的多个扩展名情况`:
演示:regex101
ukdjmx9f2#
您可以使用
\S*?
以非贪婪的方式只匹配非空格字符,并将模式缩短为前面带有点\.(?:jpe?g|png|gif)
的交替Regex demo