@answer18

Как умерить жадность регулярных выражений?

Есть следующий код:
$str = "Небольшая <b>строка</b> c <b>жирным 123 qwe</b> выделением.";
echo preg_replace("/<b>.*?<\/b>/", "***", $str);      
//Небольшая *** c *** выделением.
echo preg_replace("/<b>.*?123.*?<\/b>/", "***", $str);
//Небольшая *** выделением.

Во втором случае preg_replace заменяет полностью текст от первого b до последнего.
Есть подозрение, что .*? берет не минимальное вхождение, а первое.
Вопрос: как получить: Небольшая <b>строка</b> c *** выделением.
Заранее спасибо за ответы!
  • Вопрос задан
  • 3185 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Пока есть только туповатый вариант с заменой любого символа на нескобку
/<b>[^>]*123[^>]*?<\/b>/
Хотя второй символ заменять, скорее всего, не нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
ellrion
@ellrion
preg_replace('~<b>(.*?)</b>~', "***$1***", $str);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы