我有以下代码,但它只用以下代码替换每个img标记:< img />我需要替换中包含的所有属性。
例如,这个:
<img src="images/myimg.gif" alt="">
应该变成这样:
<img src="images/myimg.gif" alt="">
这是我目前的非工作代码:
<img src="images/myimg.gif" alt="" />
答案 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。