Php 在不移除某物的情况下,在某物之间进行预替换

Php 在不移除某物的情况下,在某物之间进行预替换,php,preg-replace,symbols,apostrophe,Php,Preg Replace,Symbols,Apostrophe,我要做的是: 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_betwee

我要做的是:

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'.
但是,实际产出(与预期不符):

如何保存符号

有人能帮我吗


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

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

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

您只需使用
preg_quote
来转义字符,如

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\u quote
本身转义这些字符


只需在替换中加上引号,比如,
$replace=preg_replace(“/”(.*?“/”,“'noname'”,$string)。谢谢,但我不想这样。我们能告诉正则表达式只选择内部报价吗?(仅选择内容而不是“内容”)@SyamsoulAzrien
返回preg_-replace(“/”$betweenWhat.”(.*?)“$betweenWhat.”/“,$betweenWhat.$replace_-thing.$betweenWhat,$target)
+使用
preg_quote()
转义
$betweenWhat
指定
preg_quote()
的分隔符将有助于OP将
/
用作$betweenWhat
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;