【问题标题】:RegEx - Searching for specific content in quotesRegEx - 在引号中搜索特定内容
【发布时间】:2023-03-27 05:09:01
【问题描述】:

知道 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匹配的第一个引号应该是最接近最后一个引号的引号?

【问题讨论】:

  • .* 是贪心的,.*? 不是。否则,您唯一的匹配将是 “fox.jpg”将“google.com”跳过“lazy.png”“google.com”超过“lazy.png” 是否匹配最少的字符数。正则表达式引擎总是返回最左边的匹配,即使稍后可以找到“更好”的匹配:regular-expressions.info/engine.html

标签: regex


【解决方案1】:

在第一个 " 之后,尝试通过否定字符集而不是 . 重复 除了 a 之外的任何内容 ",这将(不希望地)匹配 "

"[^"]*(jpg|png)"

https://regex101.com/r/PKZLp5/1

现在重复是懒惰还是贪心都无所谓,虽然当文件名比文件扩展名长时,贪心重复会稍微快一点找到匹配。

【讨论】:

  • 这太完美了!我在玩 [^"],但我仍在使用 .*?,我认为它破坏了它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多