我知道正则表达式不是在HTML中搜索的最理想的工具。但是,这就是我被赋予的工作。注意:我不是在寻找跨网站的强大功能。例如,我只是考虑引号,并不担心撇号字符。
假设我有以下文本:
The quick brown "fox.jpg" jumps "google.com" over the "lazy.png" dog.
我想搜索特定的图像链接,匹配"fox.jpg">和"lazy.png">,忽略"google.com"。理论上我可以使用这样的搜索模式
".*?"
这将找到所有引号,我可以简单地从中解析每个匹配项以确定它是否是图像。
但是像
".*?(jpg|png)"
不起作用,因为它返回"fox.jpg">(好(和"google.com"而不是"懒惰.png">(坏(。
那么:我是否缺少一个额外的"贪婪"设置?有什么要告诉正则表达式匹配的第一个引号应该是最接近最后一个引号的引号吗?
在第一个"
之后,尝试通过否定字符集重复除"
以外的任何内容,而不是.
,这将(不希望(匹配"
:
"[^"]*(jpg|png)"
https://regex101.com/r/PKZLp5/1
现在重复是懒惰还是贪婪并不重要,尽管当文件名比文件扩展名长时,贪婪的重复会更快地找到匹配项。