我需要一个聪明的正则表达式来匹配...
中的这些:
<img src="..."
<img src='...'
<img src=...
我希望匹配src
的内容,但仅,如果它被“,”或“无”包围。这意味着<img src=..."
或{{1}绝不能接受。
任何想法如何将这3个案例与一个正则表达式相匹配。
到目前为止,我使用类似<img src='...
之类的东西,而我想要解开的部分是hacky ("|'|[\s\S])(.*?)\1
,它用于匹配{的开头和结尾的“缺失符号” {1}}。
答案 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属性,你就不会使用解析器来解析。实际上,如果您想要其他属性,只需使用不同的正则表达式。您将遇到图像标记的多个匹配问题,但在这种情况下只需匹配图像标记,并为每个匹配执行所需的正则表达式。