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_CAPTURE
的 flag
,它允许您在输出数组中保留您选择的分隔符。这是一个非常简单的技术,使用 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);
谁能帮帮我? 我有一个这样的字符串:
$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_CAPTURE
的 flag
,它允许您在输出数组中保留您选择的分隔符。这是一个非常简单的技术,使用 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);