PHP 拆分为 preg_split()
Posted
技术标签:
【中文标题】PHP 拆分为 preg_split()【英文标题】:PHP split to preg_split() 【发布时间】:2011-06-11 17:44:55 【问题描述】:我想把下面一直用的split函数转换成preg_split..有点混乱,因为值会不时变化...
当前代码:
$root_dir = 'www';
$current_dir = 'D:/Projects/job.com/www/www/path/source';
$array = split('www', 'D:/Projects/job.com/www/www/path/source', 2);
print_r($array);
分割函数的输出:
Array ( [0] => D:/Projects/job.com/ [1] => /www/path/source )
【问题讨论】:
为什么要使用preg_split
?
是 split
只是一个使用 preg_split
的函数吗?你为什么不使用爆炸?
@RobertPitt:split()
是一个旧的、已弃用的函数,它根本不使用 PCRE,而是一个不同的正则表达式引擎/语法。
啊,我在php上查了一下,没用过这样的函数。
我有构建路径的功能,所以我可以很容易地在linux或windows或任何平台上使用它,不用担心任何事情..
【参考方案1】:
preg_split() 类似于旧的 ereg 函数 split()。您只需将正则表达式包含在 /.../
中,如下所示:
preg_split('/www/', 'D:/Projects/job.com/www/www/path/source', 2);
这里的封闭斜杠/
是正则表达式语法的一部分,不在字符串中搜索。如果www
分隔符是可变的,则应另外使用 preg_quote() 作为内部部分。
但请注意,如果您只查找静态字符串,则不需要正则表达式。在这种情况下,您可以像之前使用 split() 一样使用 explode()
:
explode('www', 'D:/Projects/job.com/www/www/path/source', 2);
【讨论】:
感谢您的回答。我不能接受它,因为它给我按摩,我可以在 2 分钟后接受.. 但它有效,谢谢 顺便说一句,preg_split 不是比爆炸更快吗? @Basit:通常不会。 Explode 进行简单的二分搜索,不必寻找复杂/可选的模式。它也作为核心PHP函数实现,因此可以更好地处理PHP字符串并直接生成PHP数组。 preg_split() 函数较慢,因为它在 libPCRE 上进行往返。 -- 所以explode() 总是更快。 (使用 preg_match() OTOH 的正则表达式匹配通常比简单的 PHP 字符串函数算法更有效。) @Basit 想想正则表达式所做的工作与简单地按特定关键字拆分字符串相比,显然explode()
应该更快!以上是关于PHP 拆分为 preg_split()的主要内容,如果未能解决你的问题,请参考以下文章
拆分字符串问题:使用 preg_split 和 expode() 均无效
正则表达式(preg_split):如何根据分隔符进行拆分,不包括一对引号中包含的分隔符?