Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,preg_match:如何让字符串位于两个字符之间,比如大括号,子标记包在大括号内?_Php_Preg Match_Preg Match All_Templating - Fatal编程技术网

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))*)}~';