【问题标题】:PHP: Wrong HTML replacement with preg_replace.PHP:用 preg_replace 替换错误的 HTML。
【发布时间】:2016-03-29 07:24:13
【问题描述】:

我正在制作用 PHP 替换特定 img 标签的功能。 但是……目前表现不佳。

代码如下

define('IMG_REG', '/<img.*?>/i');

$str = '<p>aaa</p><img src="aaa" >
<p>iii</p><img src="aaa" >
<p>uuu</p><img src="aaa" >
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >' ;

$num = 3;

if ( preg_match_all(IMG_REG, $str, $m, PREG_OFFSET_CAPTURE) > $num-1 ) {

    $target = $m[0][$num-1][0];
    $new = $target.'!!!';

    if( $target != NULL ):
        $str = preg_replace( $target, $new, $str, $num);
    endif;
}
echo $str;

我想把前3个“img tag”改成“img tag”+“!!!”。

所以……理想的结果是这样的

<p>aaa</p><img src="aaa" >!!!
<p>iii</p><img src="aaa" >!!!
<p>uuu</p><img src="aaa" >!!!
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >

但是……实际结果是这样的

<p>aaa</p><<img src="aaa" >!!!>
<p>iii</p><<img src="aaa" >!!!>
<p>uuu</p><<img src="aaa" >!!!>
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >

有一些''。 我不知道为什么......

做我的主人!谢谢。

【问题讨论】:

  • 你能试试这个吗:define('IMG_REG', '/img.*?/i');
  • 这将有助于regex101.com
  • 对我来说非常好的信息 :) 谢谢大家!

标签: php html regex replace preg-replace


【解决方案1】:

您忘记在“$target”正则表达式上添加分隔符。

试试这个:

define('IMG_REG', '#<img (.*)>#');

$str = '<p>aaa</p><img src="aaa" >
<p>iii</p><img src="aaa" >
<p>uuu</p><img src="aaa" >
<p>eee</p><img src="aaa" >
<p>ooo</p><img src="aaa" >' ;

$num = 3;

if ( preg_match_all(IMG_REG, $str, $m, PREG_OFFSET_CAPTURE) > $num-1 )    
{

    $target = $m[0][$num-1][0];
    $new = $target.'!!!';
    $target = "/".$target."/"; //Delimiters here!!!

    if( $target != NULL ):
       $str = preg_replace( $target, $new, $str, $num);
    endif;

}
echo $str;

【讨论】:

  • 您的解决方案完美运行!我真的很感激。谢谢我的主人;)
【解决方案2】:
$str = preg_replace('/<img (.*)>/', "<img $1>!!!", $str, $num);

到此,改成上一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多