preg заменить между чем-то, не удаляя что-то
Вот что я собираюсь сделать:
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
сам по себе побег те символыДокументы
Демо-версия