PHP Regex抓取{tag}的东西{/ tag}

时间:2010-02-09 06:50:47

标签: php regex preg-replace preg-match

我正在尝试使用正则表达式字符串与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);

谢谢,如果你能提供帮助!

2 个答案:

答案 0 :(得分:4)

如果你没有嵌套标签,这个简单的东西应该有用:

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

然后可以在$matches[1]中找到您的结果。

答案 1 :(得分:0)

我建议

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

如果其他标记嵌套在您正在查看的area标记内,这甚至可以使用。

如果你有几个area标签嵌套在一起,它仍然有效,但你需要多次应用正则表达式(每个嵌套级别一次)。

当然,匹配的内容将在$matches[2]中,而不是像Tatu的答案中的$matches[1]