PHP正则表达式获取{tag}某物{/tag}

PHP正则表达式获取{tag}某物{/tag},php,regex,preg-replace,preg-match,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_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matche

我正试图提出一个正则表达式字符串,用于PHP preg函数(preg_match等),但我在这方面遇到了难题:

如何匹配此字符串?:

{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}

如果你能帮忙,谢谢你

如果没有嵌套的标记,那么这种简单的方法应该可以工作:

preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);
您的结果可以在
$matches[1]
中找到,我建议

preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
如果其他标记嵌套在您正在查看的
区域中
标记中,这甚至可以工作

如果有多个
area
标记嵌套在一起,它仍然可以工作,但需要多次应用正则表达式(每层嵌套一次)


当然,匹配的内容将是
$matches[2]
,而不是像塔图的回答那样
$matches[1]

在这个上下文中,
~
字符做什么?@甜甜圈图案定界符指示图案的开始和结束。它们几乎可以用(afaik)任何一对字符替换。正斜杠很常用。如果正则表达式本身包含正斜杠,则正斜杠很常见,但很难使用。在这种情况下,斜杠应该转义,使用不同的字符可以避免这种情况。非常有效,谢谢!如何在标记之间包含换行符?它不匹配:{area-1}这里的某物{/area-1}(h1在新行上)@Gumbo非常正确,我撤销我的评论。你不需要转义
{
}
,除非它们是有效令牌的一部分,否则它们被解释为文字字符(例如,{n})。:)我也这么认为,但RegexBuddy已经为我插入了反斜杠,所以我同意了。我会进一步调查的。谢谢你们的帮助。我来试试。嗯。。。因为某种原因,我没法让这台工作。
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);