PHP Regex, чтобы захватить {tag} что-то {/ tag} - PullRequest
2 голосов
/ 09 февраля 2010

Я пытаюсь придумать = строку регулярного выражения для использования с функциями preg PHP (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);

Спасибо, если поможете!

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

Если у вас нет вложенных тегов, то что-то такое простое должно работать:

preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);

Ваши результаты можно найти в $matches[1].

0 голосов
/ 09 февраля 2010

Я бы предложил

preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);

Это будет работать, даже если другие теги вложены в тег area, который вы просматриваете.

Если у вас есть несколько тегов area, вложенных друг в друга, он все равно будет работать, но вам нужно будет применить регулярное выражение несколько раз (один раз для каждого уровня вложенности).

И, конечно, содержимое матчей будет в $matches[2], а не $matches[1], как в ответе Тату.

...