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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 16:55
10000 руб./за проект
23 апр. 2024, в 16:10
1500 руб./в час
23 апр. 2024, в 16:05
3000 руб./за проект