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

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

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