Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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_分割花括号_Php_Regex_Split_Preg Split - Fatal编程技术网

PHP preg_分割花括号

PHP preg_分割花括号,php,regex,split,preg-split,Php,Regex,Split,Preg Split,谁能帮我? 我有这样一个字符串: $string = '<p>{titleInformation}<p>'; $string='{titleInformation}'; 我想拆分此字符串,以便获得以下数组: array ( 0 => '<p>', 1 => '{titleInformation}', 2 => '<p>', ) 数组( 0=>“”, 1=>“{titleInformation}”, 2=>“”

谁能帮我? 我有这样一个字符串:

$string = '<p>{titleInformation}<p>';
$string='{titleInformation}';
我想拆分此字符串,以便获得以下数组:

array ( 
  0 => '<p>',
  1 => '{titleInformation}', 
  2 => '<p>',
)
数组(
0=>“”,
1=>“{titleInformation}”,
2=>“”,
)
我不熟悉正则表达式,我尝试了使用preg_match_all()函数的多种模式,但我找不到正确的模式。我也看了这个问题,但是我的字符串中没有空格

提前感谢。

preg\u match()
与捕获组一起使用。您需要避开大括号,因为它们在正则表达式中有特殊意义

preg_match('/(.*?)(\\{[^}]*\\})(.*)/', $string, $match);
var_dump($match);
结果:

array(4) {
  [0]=>
  string(24) "<p>{titleInformation}<p>"
  [1]=>
  string(3) "<p>"
  [2]=>
  string(18) "{titleInformation}"
  [3]=>
  string(3) "<p>"
}
数组(4){
[0]=>
字符串(24)“{titleInformation}”
[1]=>
字符串(3)“”
[2]=>
字符串(18)“{titleInformation}”
[3]=>
字符串(3)“”
}

$match[0]
包含整个regexp的匹配项,元素1-3包含所需的部分。

在我看来,为任务调用的最佳函数是:
preg\u split()
。它有一个名为
PREG_SPLIT_DELIM_CAPTURE
标志,允许您在输出数组中保留所选的分隔符。这是一种非常简单的技巧,使用
否定字符类(
[^}]*
)是提高代码速度的好方法。使用
preg_split()
preg_match()
的其他好处包括:

  • 由于捕获组较少,提高了效率
  • 较短的图案,更容易阅读
  • 输出数组中没有无用的“fullstring”匹配
代码:()()

$string='{titleInformation}';
瓦鲁出口(
preg_split('/({[^}]*})/',$string,NULL,preg_split_DELIM_CAPTURE)
);
输出:

array (
  0 => '<p>',
  1 => '{titleInformation}',
  2 => '<p>',
)
数组(
0=>“”,
1=>“{titleInformation}”,
2=>“”,
)

如果此答案不适用于您的所有用例,请编辑您的问题以包含示例输入字符串并ping我--我将更新我的答案。

使用
preg\u split
可以这样做

preg_split('/[{}]+/', $myString);

它需要用正则表达式来处理吗?例如,
DOMDocument
,这是一项很简单的任务。为什么
而不是

作为结束标记?
preg_split('/[{}]+/', $myString);