Задать вопрос
@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 *** выделением.
Заранее спасибо за ответы!
  • Вопрос задан
  • 3204 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Пока есть только туповатый вариант с заменой любого символа на нескобку
/<b>[^>]*123[^>]*?<\/b>/
Хотя второй символ заменять, скорее всего, не нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
ellrion
@ellrion
preg_replace('~<b>(.*?)</b>~', "***$1***", $str);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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