为什么<img/>标记不会被preg_replace替换?

时间:2016-10-13 10:53:12

标签: php regex

我想从字符串$ str中完全删除img标记元素。这是我的代码:

<?php

$re = '@<img[^>]*?/>@siu'; 
$str = '<div style="position:absolute;top:10.26in;left:6.9193in;width:0.107409in;line-height:0.151711in;"><span style="font-style:normal;font-weight:normal;font-size:8pt;font-family:Avenir LT Std 55 Roman;color:#000000">1</span><span style="font-style:normal;font-weight:normal;font-size:8pt;font-family:Avenir LT Std 55 Roman;color:#000000"> </span><br/></SPAN></div>
<img style="position:absolute;top:0.880967in;left:6.85455in;width:1.09091in;height:0.363637in" src="ri_1.png" />
<img style="position:absolute;top:0.879515in;left:0.445455in;width:6.72727in;height:0.363636in" src="ci_1.png" />
<div style="position:absolute;top:0.868212in;left:0.718182in;width:2.06073in;line-height:0.333273in;"><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">Abi</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">es</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000"> </span></SPAN><br/></div>
<div style="position:absolute;top:0.868212in;left:0.718182in;width:2.06073in;line-height:0.333273in;"><DIV style="position:relative; left:0.662291in;"><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">we</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">b</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">bi</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">an</span><span style="font-style:italic;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000">a</span><span style="font-style:normal;font-weight:normal;font-size:18pt;font-family:Myriad Pro Light;color:#000000"> </span><br/></SPAN></DIV></div>';

$rep="//";

mb_regex_encoding("UTF-8");
mb_ereg_replace($re, $rep, $str);

echo $str;

?>

preg_match-all()一起使用时,相同的正则表达式和字符串将返回所有正确的匹配项。

Array
(
    [0] => Array
        (
            [0] => <img style="position:absolute;top:0.880967in;left:6.85455in;width:1.09091in;height:0.363637in" src="ri_1.png" />
            [1] => <img style="position:absolute;top:0.879515in;left:0.445455in;width:6.72727in;height:0.363636in" src="ci_1.png" />
    )

)

如果匹配,为什么不进行替换?请建议一种删除img标签的方法。

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题。查看mb_ereg_replace mb_ereg_replace,特别是第四个参数和返回值。

第一个问题是您在正则表达式中包含标记,其中ixmpe不接受其正则表达式字符串中的标记。您必须通过第四个参数提供这些参数(并且它只接受mb_ereg_replace)。

第二个问题是,你期望mb_ereg_replace改变其论点,大多数职能都不会这样做。相反,他们会返回您期望的价值。您所要做的就是将函数的结果存储在变量中。

(另外,正如我所说,s无法使用u$re = '<img[^>]*?/>'; $newStr = mb_ereg_replace($re, $rep, $str, 'i'); echo $newStr; 标记,请查看文档。)

所以:

mb_ereg_replace

编辑:我对此进行了更多研究,我可能错误地认为s接受了哪些标记。但是你的正则表达式可以使用或不使用uonSelect标志。