我想创建一个在@{ some text }
之间捕获文本的正则表达式。我知道如何为简单字符串执行此操作,但在这种情况下,@{
}
之间的文本可能包含起始和结束花括号,这些大括号会与@{
{{中的大括号混淆1}}。
示例:
输入字符串:
}
结果(3场比赛)应为:
第一场比赛:
This is some text that does not match the regex
@{
This is some text
{
This another text
{
inner text
}
}
}
@{
this is text2
}
another text that does not match the regex
@{
this is another text
{
another inner text
}
}
第二场比赛:
This is some text
{
This another text
{
inner text
}
}
第三场比赛:
this is text2
有谁能告诉我如何实现这个目标?我顺便使用PHP。
答案 0 :(得分:2)
可能需要recursive regex来解决嵌套大括号:
if(preg_match_all('/@(?={)([^}{]+|{((?1)*)})/', $str, $out)!==false)
print_r($out[2]);
@(?={)
从@
if followed by开头大括号[^}{]
匹配任何字符that is not大括号(?1)
((?1)*)
将想要的内容捕获到第二组如果感兴趣,请参阅test at regex101,test at eval.in,SO regex FAQ:]