
用PHP将字符串按多个分隔符转为数组,最直接且强大的方法是使用
preg_split()
在PHP中,当你需要根据一个或多个不同的字符或字符串来分割一个主字符串时,
preg_split()
核心思想是构建一个正则表达式,将所有你想要作为分隔符的字符或模式包含进去。例如,如果你想用斜杠(
/
-
,
`)来分割字符串,你的正则表达式模式可以是
。这里的
是正则表达式的定界符,
表示一个字符集,
下面是一个具体的代码示例:
立即学习“PHP免费学习笔记(深入)”;
<?php
$string = "apple/banana-orange,grape pear";
// 定义多个分隔符:斜杠、连字符、逗号、空格
// 模式:~[/,\s-]~
// ~ เป็น定界符 (delimiter)
// [] 表示字符集
// / , - 是字面字符
// \s 表示任何空白字符(包括空格、制表符等)
$array = preg_split('~[/,\s-]~', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($array);
/*
输出:
Array
(
[0] => apple
[1] => banana
[2] => orange
[3] => grape
[4] => pear
)
*/
// 另一个例子,处理重复分隔符和开头/结尾的分隔符
$string2 = " first--second,third/fourth ";
$array2 = preg_split('~[/,\s-]+~', $string2, -1, PREG_SPLIT_NO_EMPTY);
print_r($array2);
/*
输出:
Array
(
[0] => first
[1] => second
[2] => third
[3] => fourth
)
*/
?>在这个例子中,我传入了
PREG_SPLIT_NO_EMPTY
array_filter()
+
~[/,\s-]+~
--
说实话,我个人觉得很多PHP开发者在遇到字符串分割问题时,第一反应往往是
explode()
explode()
explode()
explode()
explode()
str_replace()
explode()
而
preg_split()
explode()
preg_split()
处理空字符串和重复分隔符是字符串分割中非常常见的痛点。想象一下,如果你的字符串是
"apple,,banana---orange"
["apple", "", "banana", "", "", "orange"]
preg_split()
PREG_SPLIT_NO_EMPTY
preg_split()
array_filter()
<?php
$stringWithEmpties = "item1,,item2---item3";
$arrayWithEmpties = preg_split('~[,|-]~', $stringWithEmpties);
print_r($arrayWithEmpties);
/*
输出:
Array
(
[0] => item1
[1] =>
[2] => item2
[3] =>
[4] =>
[5] => item3
)
*/
// 使用 PREG_SPLIT_NO_EMPTY 过滤空字符串
$arrayNoEmpties = preg_split('~[,|-]~', $stringWithEmpties, -1, PREG_SPLIT_NO_EMPTY);
print_r($arrayNoEmpties);
/*
输出:
Array
(
[0] => item1
[1] => item2
[2] => item3
)
*/
?>至于重复分隔符,比如
"apple---banana"
~[-]~
preg_split()
+
~[,|-]+~
PREG_SPLIT_NO_EMPTY
preg_split()
+
PREG_SPLIT_NO_EMPTY
使用
preg_split()
一个最常见的陷阱就是正则表达式特殊字符的转义。如果你想用
.
*
+
?
[
]
(
)
\
^
$
\
.
~\.~
~.~
~.~
.
preg_quote()
另一个需要考虑的是性能。虽然
preg_split()
explode()
preg_split()
模式的可读性也是一个最佳实践。复杂的正则表达式很容易变得难以理解和维护。尽量保持你的正则表达式模式清晰明了,必要时可以添加注释(虽然PHP的
preg_split()
~[a-zA-Z0-9_]+~
~\w+~
最后,字符编码问题也不容忽视。如果你的字符串包含非ASCII字符(如中文),并且你的PHP环境或文件编码不是UTF-8,或者你没有在正则表达式中使用
u
~[/,\s-]+~u
preg_split()
u
以上就是如何用PHP将字符串按多个分隔符转为数组?实现方法分享的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号