preg_replace между чем-то, не удаляя что-то

Что я собираюсь сделать, это:

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.

Как сохранить символ ??

кто-нибудь может мне помочь ???

извините, я просто редактирую свой вопрос, чтобы показать, что я хочу делать.

2

Решение

Вам просто нужно использовать 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_quote сам по себе избежать этих персонажей

Документы

демонстрация

2

Другие решения

Вы можете просто включить кавычки снова в строку замены:

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

По вопросам рекламы [email protected]