我有以下代码,但它将每个img标记替换为:我需要替换中包含的所有属性。
例如,这个:<img src="images/myimg.gif" alt="">
应该变成这样:<img src="images/myimg.gif" alt="" />
下面是我当前不能工作的代码:$html = preg_replace("/<img[^>]+\>/i", "<img $1 />", $html);
发布于 2012-01-18 15:38:51
$html = preg_replace("@(<img.*?)(?<!/)>@i", "$1/>", $html); 发布于 2012-01-18 15:26:44
如果你想使用$1,你首先需要在其中存储一些东西。这是由捕获组完成的,这意味着只需将您想要重用的模式括起来即可。
$html = preg_replace("/<img([^>]+)\>/i", "<img $1 />", $html);有几个在线工具可以测试您的正则表达式,请参阅您的正则表达式,例如here on RegExr
您可以找到有关groups here on regular-expressions.info的更多信息
发布于 2012-01-18 15:56:05
此正则表达式可能适用于您,但如果重复应用,它将一次又一次地插入/,从而导致<img ... / / / / />等结果:
$html = preg_replace("/<img([^>]+)\>/is", "<img \1 />", $html);要避免这种情况,您可以使用negative lookbehind (?<!\/)
$html = preg_replace("/<img([^>]+)(?<!\/)\>/is", "<img \1 />", $html);它只匹配未用/>关闭的图像标记
https://stackoverflow.com/questions/8906503
复制相似问题