【问题标题】:How can I parse <img src> with a regex?如何使用正则表达式解析 <img src>?
【发布时间】:2010-10-28 22:26:35
【问题描述】:

我需要一个聪明的正则表达式来匹配这些中的...

<img src="..."
<img src='...'
<img src=...

我想匹配src的内部内容,但是只有如果它被“,'包围或没有。这意味着&lt;img src=..."&lt;img src='...一定不能被接受。

任何想法如何用一个正则表达式匹配这 3 种情况。

到目前为止,我使用类似 ("|'|[\s\S])(.*?)\1 的东西,而我想要放松的部分是 hacky [\S\s],我用它来匹配 ... 开头和结尾的“缺失符号”。

【问题讨论】:

  • 听起来您真正需要的是 HTML 解析器,而不是正则表达式。
  • 我使用 Java。而且我不需要 HTML 解析器...真的。
  • "clever" 和 "regex" 很少能有一个美好的结局。

标签: regex


【解决方案1】:

哇,我今天要回答第二个。

Don't parse HTML with regex。使用 HTML/XML 解析器,您的生活会轻松很多。 Tidy 将为您清理 HTML 代码,因此您可以先通过 Tidy 运行 HTML,然后再通过解析器。一些基于 tidy 的库除了 santizing 之外还会执行解析,因此您甚至可能不必通过另一个解析器运行它。

例如,Java 有JTidy,PHP 有PHP Tidy

更新

根据我更好的判断,我给你这个:

/&lt;img\s+src\s*=\s*(["'][^"']+["']|[^&gt;]+)&gt;/

仅适用于您的特定情况。即便如此,它也不会考虑图像源名称中转义的"'&gt; 字符。可能还有许多其他限制。捕获组为您提供图像名称(如果名称被单引号或双引号括起来,它也会为您提供这些名称,但您可以将其去掉)。

【讨论】:

  • 不,我打算不使用解析器。该任务很简单,只需一个小正则表达式即可完成。
  • 我们要告诉您的是,该任务并不简单到可以通过一个小的正则表达式来完成。如果是的话,你早就做到了。
  • @Lucho,如果任务简单到可以通过正则表达式完成,你为什么要问我们?我们告诉您,该任务并不简单足以通过正则表达式(小或其他)来解决。
  • 好吧,你说服了我 :-) 世界是残酷的,可能充满了丑陋和混乱的 html 代码,所以解析器是一种救援......但在一个完美的世界中,可能会有只是 grep img 标签的 src 属性的内容:D
  • @Lucho 也许,但可能不是 HTML 不规则 :)
【解决方案2】:

根据您用于解决此问题的脚本或编程语言,可以使用多个正则表达式或仅使用一个检查组的正则表达式来完成。

&lt;img[^s]+src=("(.+)"|'(.+)'|(.+))[^/&lt;]+(/&gt;|&lt;/img&gt;)

如果你想要的只是图像的 src 属性,那么你就没有 可以使用解析器进行解析。事实上,如果您想要其他属性,只需使用不同的正则表达式。您将遇到图像标签的多个匹配问题,但在这种情况下,只需匹配图像标签,并为每个标签执行您想要的正则表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多