NapalmRain
@NapalmRain
программист самоучка

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

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

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

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

Это работает ровно до тех пор, пока в тексте встречается один такой случай, как только их встречается больше одного, начинается веселуха, а именно между тегами h2 заключается весь текст, который встречается между первым попаданием == и самым последним ==.
Все статьи по регулярным выражениям, которые мне довелось читать мне не дались.
Возможно я слишком туп, но я был бы чрезмерно признателен за объяснение как исправить эту ситуацию и, если возможно, простыми словами как оно вообще работает?
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
DevMan
@DevMan
/==(.*?)==/ или /==(.*)==/U
php.net/manual/ru/reference.pcre.pattern.modifiers.php

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

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

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