谁能帮助我? 我有一个这样的字符串:
$string = '<p>{titleInformation}<p>';
我想拆分这个字符串,以便得到以下数组:
array (
0 => '<p>',
1 => '{titleInformation}',
2 => '<p>',
)
我是正则表达式的新手,我使用preg_match_all()函数尝试了多种模式,但我无法得到正确的模式。还看了这个问题PHP preg_split if not inside curly brackets,但我的字符串中没有空格。
提前谢谢。
答案 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_CAPTURE
(negated character classes
)是加快代码速度的好方法。使用[^}]*
与preg_split()
的其他好处包括:
代码:(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);