@khodos_dmitry

Как сделать, чтобы preg_replace заменял все вхождения?

Допустим, мне нужно заменить
|x+|2x-3||
на
abs(x+abs(2x-3))
Я делаю так:
for ($i = 0; $i <= 5; $i++) {
$func = preg_replace('#\|(.+)\|#', 'abs($1)', $func);
}

Потому что просто: $func = preg_replace('#\|(.+)\|#', 'abs($1)', $func);
делает так: abs(x+|2x-3|), то есть только первое вхождение заменяет.
Может есть способ получше, чем мой?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 2
@str02
А зачем preg_replace в цикл засовывать. Он же массив выдает. Вот как то так.
preg_replace('#\|(.+)\|#', 'abs($1)', $func);
for ($i = 0; $i <= count($func); $i++) {
echo $func[$i];
}
Ответ написан
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
рекурсивный модификатор более недоступен, используйте preg_replace_callback()
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
Сбер Москва
До 240 000 ₽
RecruitIT Москва
от 120 000 до 150 000 ₽
21 окт. 2020, в 13:40
35000 руб./за проект
21 окт. 2020, в 13:24
700 руб./за проект