我需要一个聪明的正则表达式来匹配这些中的
...
:
<img src="..."
<img src='...'
<img src=...
我想匹配
src
的内部内容,但是 only 如果它被 ", ' 包围或没有。这意味着 <img src=..."
或 <img src='...
不能被接受。
有什么想法可以用一个正则表达式来匹配这 3 种情况。
到目前为止,我使用类似这样的东西
("|'|[\s\S])(.*?)\1
,我想要放松的部分是老套的[\S\s]
,我用它来匹配...
开头和结尾的“缺失符号”。
哇,我今天回答的第二个。
不要使用正则表达式解析 HTML。使用 HTML/XML 解析器,您的生活将会变得更加轻松。 Tidy 将为您清理 HTML 代码,因此您可以先通过 Tidy 运行 HTML,然后通过解析器运行 HTML。一些基于 tidy 的库除了清理之外还会执行解析,因此您甚至可能不需要通过另一个解析器运行它。
例如,Java 有 JTidy,PHP 有 PHP Tidy。
更新
根据我更好的判断,我给你这个:
/<img\s+src\s*=\s*(["'][^"']+["']|[^>]+)>/
这只适用于您的具体情况。即便如此,它也不会考虑图像源名称中转义的
"
或 '
或 >
字符。可能还有很多其他限制。捕获组为您提供图像名称(如果名称用单引号或双引号引起来,它也会为您提供这些名称,但您可以将它们删除)。
根据您用来解决此问题的脚本或编程语言,可以使用多个正则表达式或仅使用一个检查组的正则表达式来完成。
<img[^s]+src=("(.+)"|'(.+)'|(.+))[^/<]+(/>|</img>)
如果您想要的只是图像 src 属性,则无需 有 使用解析器进行解析。事实上,如果您想要其他属性,只需使用不同的正则表达式即可。您将遇到图像标签多次匹配的问题,但在这种情况下,只需匹配图像标签,并为每个标签执行您想要的正则表达式。