【问题标题】:preg_replace between something without removing the somethingpreg_replace 之间的东西而不删除的东西
【发布时间】:2016-02-23 19:26:39
【问题描述】:

我要做的是:

function replace_between_something($betweenWhat,$replace_thing,$target){
return preg_replace("/".$betweenWhat."(.*?)".$betweenWhat."/",$replace_thing,$target);
}
$string="Hi, *my* name is 'Soul' and she is 'Maggie'. ";

$replace=replace_between_something("\*","your",$string);
$replace=replace_between_something("'","noname",$replace);

echo $replace;

预期的输出是:

Hi, *your* name is 'noname' and she is 'noname'.

但是,真正的输出(不是预期的):

Hi, your name is noname and she is noname.

符号怎么保存??

谁能帮帮我???

抱歉,我只是编辑我的问题以显示我想要做的实际事情。

【问题讨论】:

  • 只需将引号放入您的替换中,例如 $replace=preg_replace("/'(.*?)'/","'noname'",$string);
  • 谢谢,但我不想那样……
  • 我们可以告诉正则表达式只选择内部引号吗? (只选择内容而不是“内容”)
  • @SyamsoulAzrien return preg_replace("/".$betweenWhat."(.*?)".$betweenWhat."/",$betweenWhat . $replace_thing . $betweenWhat,$target); + 使用preg_quote() 转义$betweenWhat

标签: php preg-replace symbols apostrophe


【解决方案1】:

您可以在替换字符串中再次包含引号:

$string="Hi, my name is 'Soul' and she is 'Maggie'. ";
$replace=preg_replace("/'(.*?)'/","'noname'",$string);
echo $replace;

【讨论】:

    【解决方案2】:

    您只需要使用preg_quote 来转义诸如 as 之类的字符

    function replace_between_something($betweenWhat, $replace_thing, $target) {
        return preg_replace("/" . preg_quote($betweenWhat) . "(.*?)" . preg_quote($betweenWhat) . "/", $betweenWhat.$replace_thing.$betweenWhat, $target);
    }
    
    $string = "Hi, *my* name is 'Soul' and she is 'Maggie'. ";
    
    $replace = replace_between_something("*", "your", $string) . "\n";
    $replace = replace_between_something("'", "noname", $replace);
    
    echo $replace;
    

    特殊的正则表达式字符为:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

    分隔符 如果指定了可选的分隔符,它也会被转义。这对于转义 PCRE 函数所需的分隔符很有用。 / 是最常用的分隔符。

    所以你不需要 ---> \* 那个反斜杠来转义,因为 preg_quote 本身就转义了这些字符

    Docs

    Demo

    【讨论】:

    • 指定 preg_quote() 的分隔符将有助于 OP 使用 / 作为 $betweenWhat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2013-02-09
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多