Вопрос

Я пытаюсь создать строку регулярного выражения для использования с функциями 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] как в ответе Тату.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top