PHP Preg_replace для всех экземпляров определенного текста?

#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##