PHP,preg_match:如何让字符串位于两个字符之间,比如大括号,子标记包在大括号内?
如果我有如下字符串:PHP,preg_match:如何让字符串位于两个字符之间,比如大括号,子标记包在大括号内?,php,preg-match,preg-match-all,templating,Php,Preg Match,Preg Match All,Templating,如果我有如下字符串: $str = "Some {translate:text} with some {if:{isCool}?{translate:cool}|{translate:uncool}} features"; 。。。我希望得到以下结果: array ( 0 => 'translate:text', 1 => 'if:{isCool}?{translate:cool}|{translate:uncool}', ) 我已经有了这个函数,但是我相信它可以通过pre
$str = "Some {translate:text} with some {if:{isCool}?{translate:cool}|{translate:uncool}} features";
。。。我希望得到以下结果:
array (
0 => 'translate:text',
1 => 'if:{isCool}?{translate:cool}|{translate:uncool}',
)
我已经有了这个函数,但是我相信它可以通过preg\u match(\u all)来简化它
是否有可能调整我们提到的模式以获得正确的结果
array (
0 => 'translate:text',
1 => 'if:{isCool}?{translate:cool}|{translate:uncool}',
)
您需要使用递归模式,例如:
$pattern = '~{((?>[^{}]++|(?R))*)}~';
其中,(?R)
表示所有模式(在其内部重复的整个模式)
array (
0 => 'translate:text',
1 => 'if:{isCool}?{translate:cool}|{translate:uncool}',
)
$pattern = '~{((?>[^{}]++|(?R))*)}~';