PHP preg_split大括号

时间:2017-11-18 16:12:32

标签: php regex split preg-split

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

$string = '<p>{titleInformation}<p>';

我想拆分这个字符串,以便得到以下数组:

array ( 
  0 => '<p>',
  1 => '{titleInformation}', 
  2 => '<p>',
)

我是正则表达式的新手,我使用preg_match_all()函数尝试了多种模式,但我无法得到正确的模式。还看了这个问题PHP preg_split if not inside curly brackets,但我的字符串中没有空格。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

preg_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>"
}

$match[0]包含整个正则表达式的匹配项,元素1-3包含您想要的部分。

答案 1 :(得分:0)

在我看来,调用任务的最佳功能是:preg_split()。它有一个名为flag的{​​{1}},它允许您在输出数组中保留所选的分隔符。这是一种非常简单的技术,使用PREG_SPLIT_DELIM_CAPTUREnegated character classes)是加快代码速度的好方法。使用[^}]*preg_split()的其他好处包括:

  • 由于捕获群较少而提高效率
  • 更简单的图案,更容易阅读
  • 输出数组中没有无用的“fullstring”匹配

代码:(PHP Demo)(Pattern Demo

preg_match()

输出:

$string = '<p>{titleInformation}<p>';
var_export(preg_split('/({[^}]*})/',$string,NULL,PREG_SPLIT_DELIM_CAPTURE));

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

答案 2 :(得分:0)

使用preg_split可以通过这种方式完成

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