пример
preg_replace('/\{[a-zA-Z.,\(\)0-9]+\}/', 'Replaced', 'Lorem ipsum dolor sit {tag1({tag2()})}, consectetur adipiscing elit.');
Результат:
Lorem ipsum dolor сидит {tag1 (заменен)}, consectetur adipiscing elit.
Вопрос
Как вы видите, «tag2» был заменен, но я хочу заменить «tag1». Кто-нибудь знает, как я могу это сделать?
(В некоторых случаях это может быть так: {tag1({tag2({tag3()})})})
и т. Д.)
Btw Я использую preg_replace_callback, но его проще показать с помощью preg_replace
Вот сайт, на котором вы можете протестировать код: http://www.spaweditor.com/scripts/regex/index.php
Вам нужно добавить фигурные скобки к вашему набору символов. Вот шаблон, который я использовал:
/\{[a-zA-Z.,\(\)\{\}0-9]+\}/
И вот результат:
"Lorem ipsum dolor sit Replaced, consectetur adipiscing elit."
После того, как вы начнете говорить о сопоставлении вложенных шаблонов (например: сопоставление внутренней группы в квадратных скобках с чем-то вроде (foo (bar) fu)
), то регулярное выражение является неправильным инструментом. Регулярные выражения являются апатридами, что в данном случае означает, что они не могут подсчитать, сколько скобок открыто.
Если вы хотите сделать что-то подобное, вам может потребоваться изучить парсер