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()的主要内容,如果未能解决你的问题,请参考以下文章

PHP将每个段落拆分为数组

拆分字符串问题:使用 preg_split 和 expode() 均无效

正则表达式(preg_split):如何根据分隔符进行拆分,不包括一对引号中包含的分隔符?

拆分几行长文本

php preg_split 查找字符串中的所有单词不起作用

拆分字符串中的第一个空格和最后一个空格并将输出的大小限制为3