如何用正则表达式解析<img src=""/>?

时间:2010-10-28 22:26:35

标签: regex

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

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

我希望匹配src的内容,但,如果它被“,”或“无”包围。这意味着<img src=..."或{{1}绝不能接受。

任何想法如何将这3个案例与一个正则表达式相匹配。

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

2 个答案:

答案 0 :(得分:12)

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

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

例如,Java有JTidy,PHP有PHP Tidy

<强>更新

反对我更好的判断,我给你这个:

/<img\s+src\s*=\s*(["'][^"']+["']|[^>]+)>/

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

答案 1 :(得分:0)

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

<img[^s]+src=("(.+)"|'(.+)'|(.+))[^/<]+(/>|</img>)

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