Задать вопрос
NapalmRain
@NapalmRain
программист самоучка

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

Доброго времени суток всем!

Есть задача заменить один набор символов на другой набор символов, оставив то, что между ними нетронутым.
То есть что-то типа стандартной замены тегов или викиразметки.

Пришёл к выводу, что делать это проще всего регулярными выражениями, но так как я в ним просто дуб дерево, получается у меня из рук вон плохо.
Вот всё, до чего я смог додуматься
$result = preg_replace("/==(.*)==/", "<h2>$1</h2>", $text);

Это работает ровно до тех пор, пока в тексте встречается один такой случай, как только их встречается больше одного, начинается веселуха, а именно между тегами h2 заключается весь текст, который встречается между первым попаданием == и самым последним ==.
Все статьи по регулярным выражениям, которые мне довелось читать мне не дались.
Возможно я слишком туп, но я был бы чрезмерно признателен за объяснение как исправить эту ситуацию и, если возможно, простыми словами как оно вообще работает?
  • Вопрос задан
  • 214 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
DevMan
@DevMan
/==(.*?)==/ или /==(.*)==/U
php.net/manual/ru/reference.pcre.pattern.modifiers.php

по дефолту поиск "жадный": захватывает максимум возможного. соответственно, с помощью модификатора U или знака вопроса в самом выражении мы говорим "стапэ, не жадничай".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽