【问题标题】:preg_replace and an array not workingpreg_replace 和数组不工作
【发布时间】:2011-11-30 15:56:03
【问题描述】:

这不起作用。我希望它用 ralph 替换数组值的每个共同保险。相反,我得到了 $data 的不变值。任何关于为什么的见解?

$data="there is a dog in the car out back";

$bill= explode(' ',$data);

$bob[0]="dog";
$bob[1]="car";
$bob[2]="back";

$qq = preg_replace("|($bob)|Ui", "ralph" , htmlspecialchars($data));

echo $qq;

【问题讨论】:

    标签: php arrays preg-replace


    【解决方案1】:

    如果你在字符串上下文"$bob" 中插入一个像$bob 这样的数组,那么它就会变成"Array"

    至少你需要再次implode它作为替代列表:

    $regex_bob = implode("|", $bob);   // you should also apply preg_quote()
    # $regex_bob = "dog|car|back|...";
    

    然后使用更合理的正则表达式分隔符(因为| 用于替代品):

    $qq = preg_replace("~($regex_bob)~Ui", "ralph" , htmlspecialchars($data));
    

    【讨论】:

    • 谢谢你,所有的回复都很有帮助。我很感激你的时间。抄送
    【解决方案2】:

    试试这个:

    echo "|($bob)|Ui";
    

    ...您将看到问题所在。如果您只是将数组放入字符串中,则会导致字符串 Array 被添加到字符串中 - 所以您正在执行的实际正则表达式是:

    "|(Array)|Ui"
    

    您需要明确告诉 PHP 如何 将数组转换为字符串 - 在这种情况下,我建议您使用 implode():

    $expr = "/(".implode('|',$bob).")/Ui";
    $qq = preg_replace($expr, "ralph" , htmlspecialchars($data));
    // Should return "there is a ralph in the ralph out ralph"
    

    请注意,我还将分隔符更改为/ - 这是因为您需要在正则表达式中按字面意思使用|,因此最好选择另一个分隔符。

    【讨论】:

      【解决方案3】:

      这样使用:

      $data="there is a dog in the car out back";
      
      $bill= explode(' ',$data);
      
      $bob[0]="/dog/ui";
      $bob[1]="/car/ui";
      $bob[2]="/back/ui";
      
      echo preg_replace($bob, "ralph", $data);
      

      你必须传递一个正则表达式列表,你想用一个字符串或一个替换列表来替换它。更多信息:http://php.net/manual/en/function.preg-replace.php

      【讨论】:

        猜你喜欢
        • 2013-11-26
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多