【发布时间】:2018-11-09 07:19:10
【问题描述】:
我正在使用下面的正则表达式在图像标签前面附加一个元素,但它不起作用。我从Add link around img tags with regexp获取此代码
preg_replace('#(<img[^>]+ src="([^"]*)" alt="[^"]*" />)#', '<a href="$2" ...>$1</a>', $str)
但是,如果我在没有 src 的情况下使用下面的代码,它可以工作。
preg_replace('#(<img[^>]+ alt="[^"]*" />)#', '<a href="" ...>$1</a>', $str)
我无法从图像标签中获取 src 的任何原因。
我的图片标签是<img src="" alt="">
【问题讨论】:
-
试图使用正则表达式来处理 HTML 肯定是难以辨认的,并且如图所示在其他方面是严格的。尝试使用 DOMDocument 来处理它,你应该会得到更好的结果。 (尝试
#(<img[^>]+src="([^"]*)" alt="[^"]*">)#为您的模式,但这仍然是脆弱的) -
@NigelRen 我试过你的模式。它仍然无法正常工作。
-
这就是为什么我说 - 不要使用它!,正确使用 - 如果有人编码他们的锚标签
<img alt="" src="" />会发生什么? -
只需转义最后一个正斜杠
/,以具有src的模式。 And it will work -
@rv7 我已经解决了这个问题,使用这个模式
#(<img.*?src="(.*?)"[^\>]+>)#。谢谢。
标签: php regex preg-replace