#php
#php
Вопрос:
У меня есть следующий текст, и я хочу заменить все instace, которые начинаются и заканчиваются на ##, как я могу подготовить регулярное выражение для preg_replace php. Пример
Мы столкнулись с проблемой ##anytext ## и скоро сообщим вам об этой проблеме ##textsomethingelse##
Мой вопрос, как я могу заменить все экземпляры ##anytext ## конкретным текстом?
Комментарии:
1. Я хочу заменить текст, начинающийся с ## и заканчивающийся на ## для чего-то.
2. str_replace(«##name ##»,»Alin Purachu»,$str) , это заменяет только один экземпляр, если у меня есть ##email ## и некоторые другие, тогда php str_replace для всех остальных.
Ответ №1:
Вероятно, вам нужно использовать preg_replace_callback
для этой задачи.
И пример:
<?php
$replacements = array(
'anytext' => 'ANYTEXT',
'else' => 'ELSE',
);
echo preg_replace_callback(
'/##(.*?)##/',
create_function(
'$matches',
'global $replacements; return $replacements[ $matches[1] ];'
),
'We are encountering a problem ##anytext## and will update you soon regarding this problem ##else##'
);
Примечание: В этом примере используется create_function
, но если вы используете PHP> = 5.3, вам лучше использовать замыкание.
Комментарии:
1. «php str_replace заменяет только один экземпляр, например str_replace(«###name ##»,»Alin Purachu»,$str)
Ответ №2:
Интересно, почему глобальный флаг не работает с simple preg_replace
. Вот так:
<?php
$string = 'We are encountering a problem ##anytext## and will update you soon regarding this problem ##textsomethingelse##';
$pattern = '/##anytext##/g';
$replacement = 'with the service';
echo preg_replace($pattern, $replacement, $string);
?>
Это приведет к:
We are encountering a problem with the service and will update you soon regarding this problem ##textsomethingelse##