在编程中经常与遇到将一个字符串根据某个字符切分的问题。
一般我们会用explode将字符串切分成一个数组,然后进行进一步的操作。
但假如有一个需求是要截取一个字符串中某两个相邻的分割字符中间的字串,那么用explode就显得有点浪费了。
毕竟很多其他的被截取出来的字串用不到阿。浪费了空间也浪费了计算。
今天发现了一个方法,就是用preg_match。(如有雷同,实属缘分)
具体方法是这样的:
function getsubstr($str,$dec,$index){//获取str中第index个分隔符dec到第index+1个分隔符之间的字串 $index+=1; $a = '/^([^'.$dec.']*'.$dec.'){'.$index.'}/'; $match = Array(); preg_match($a,$str,$match); if(isset($match[1])) return rtrim($match[1]); return ''; }?
具体原理就不解释了,大家都看的明白的。
?
此外另外的两种方法分别是explode截取出字符串数组,然后取值;以及循环遍历字符串,找到对应的两个分隔符的位置然后截取字符串。
?
经过测试得到:
?
10w行记录处理时间:
??? 本文方法?? : 1.3521399497986
??? explode ?? : 1.4456930160522
??? 循环遍历?? : 1.4808049201965
?
测试结果显示,10W行记录处理时间最多相差0.1秒。
?
不知还有什么其他方法?
1 楼
llh110220
2012-09-19
10万行文本都在一个文件中么?还是10w次循环时间
2 楼
liuzhiqiangruc
2012-09-19
llh110220 写道
10万行文本都在一个文件中么?还是10w次循环时间
嗯,是的10w行都在一个文本文件中。