PHP Regex для захвата {tag}чего-то{/tag}
-
19-09-2019 - |
Вопрос
Я пытаюсь создать строку регулярного выражения для использования с функциями PHP preg (preg_match и т. д.), и я в тупике:
Как вы сопоставляете эту строку?:
{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}
Я хочу заменить его другой строкой, используя preg_replace.
До сих пор мне удавалось идентифицировать первый тег с помощью preg_match следующим образом:
preg_match("/\{(area-[0-9]*)\}/", $mystring);
Спасибо, если сможете помочь!
Решение
Если у вас нет вложенных тегов, должно работать что-то такое простое:
preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);
Ваши результаты можно будет найти в $matches[1]
.
Другие советы
Я бы предложил
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
Это будет работать, даже если внутри тега вложены другие теги. area
тег, на который вы смотрите.
Если у вас есть несколько area
теги вложены друг в друга, это все равно будет работать, но вам придется применять регулярное выражение несколько раз (по одному разу для каждого уровня вложенности).
И, конечно же, содержание матчей будет в $matches[2]
, нет $matches[1]
как в ответе Тату.