我知道RegEx不是最适合在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”而不是“lazy.png”(坏)。
那么:我是否缺少一个额外的“贪婪”设置?有什么要告诉RegEx,匹配的第一个引号应该是最接近最后一个引号的引号?
在第一个"
之后,尝试通过一个否定的字符集重复除了"
以外的任何东西,而不是.
,它将(不合需要地)匹配"
:
"[^"]*(jpg|png)"
https://regex101.com/r/PKZLp5/1
现在重复是懒惰还是贪婪并不重要,但是当文件名长于文件扩展名时,贪婪的重复会发现匹配稍快一些。