PHP preg_split 大括号

PHP preg_split curly brackets

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

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

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

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

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

提前致谢。

对捕获组使用 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 包含您想要的部分。

在我看来,为您的任务调用的最佳函数是:preg_split()。它有一个名为 PREG_SPLIT_DELIM_CAPTUREflag,它允许您在输出数组中保留您选择的分隔符。这是一个非常简单的技术,使用 negated character classes ([^}]*) 是加速代码的好方法。使用 preg_split()preg_match() 相比的其他好处包括:

  • 捕获组减少,效率提高
  • 更短的模式更容易阅读
  • 输出数组中没有无用的“全字符串”匹配

代码:(PHP Demo) (Pattern Demo)

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

输出:

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

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

有了preg_split就可以这样做

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