preg_replace在IMG标记中提出斜杠

时间:2012-01-18 07:18:01

标签: php html regex preg-replace

我有以下代码,但它只用以下代码替换每个img标记:< img />我需要替换中包含的所有属性。

例如,这个: <img src="images/myimg.gif" alt="">

应该变成这样: <img src="images/myimg.gif" alt="">

这是我目前的非工作代码: <img src="images/myimg.gif" alt="" />

4 个答案:

答案 0 :(得分:2)

如果您想使用$1,首先需要在其中存储内容。这是由捕获组完成的,这意味着只需在要重用的模式周围放置括号。

$html = preg_replace("/<img([^>]+)\>/i", "<img $1 />", $html);

有几种在线工具可供您测试正则表达式,请参阅正则表达式,例如here on RegExr

您可以找到有关群组here on regular-expressions.info

的更多信息

答案 1 :(得分:2)

$html = preg_replace("@(<img.*?)(?<!/)>@i", "$1/>", $html); 

答案 2 :(得分:2)

此正则表达式可能适合您,但如果重复应用,它会一次又一次插入/,从而产生<img ... / / / / />等等:

$html = preg_replace("/<img([^>]+)\>/is", "<img \1 />", $html);

为避免这种情况,您可以使用negative lookbehind (?<!\/)

$html = preg_replace("/<img([^>]+)(?<!\/)\>/is", "<img \1 />", $html);

它仅匹配 关闭/>

的图像标记

答案 3 :(得分:1)

在正则表达式中的属性周围添加括号,然后您可以在替换器中使用$ 1:

$html = preg_replace("/<img([^>]+)\>/i", "<img $1 />", $html);

另见example