zoukankan      html  css  js  c++  java
  • php 对字符串的分块处理

    //如何把以下的字符串分成每一个小块, 如:2017.2.14
    我们都是中国人
    小日本  这样的为一个小块
    $str = '2017.2.14
    我们都是中国人
    小日本
    2017.2.15
    订单取消
    资讯标签bug
    哈看看我给
    余额充值页面
    2017.2.16
    修改bug
    加载更多哈哈
    2017.2.17
    中中中中
    中岛
    小肥羊';

    最终处理结果为: 

    好了. 不多说了. 看代码吧--->>>

    [第一种]:

    // $partent1 = "/(d{4}.d{1,2}.d{1,2}[
    
    ]+[x{4e00}-x{9fa5}_a-zA-Z
    
    ]+)/u";
    $partent2 = "/d{4}.d{1,2}.d{1,2}(S|s[^(d{4}.d{1,2}.d{1,2})])*/u";
    preg_match_all($partent2, $str, $match);
    foreach ($match[0] as $key => $value) {
        $match_tmp[] = explode("
    ", $value);
    }
    p($match[0], $match_tmp, 'y');

    这里的partent1和partent2同样可以匹配出类似如下的数据::

    但partent1与partent2所不同的是, partent1会在最后匹配时, 多了一行 的匹配,...如红色箭头所指的:

    嗯, 大家应该看到是什么原因了吧... 两个正则所不同, partent1用的匹配方法是直接匹配到日期后面的中文然后返回, 而partent2用的匹配方法是取两个日期中间匹配的方法, 如partent1中的 [x{4e00}-x{9fa5}_a-zA-Z ] 里面就是匹配到了 这样的. 所以每次匹配非最后一段时都会有这样的结果.... 这里还得想办法去掉它才好-----

    好了. 第一种方法的最终结果为:

    {第一种: ---正确}

    [第二种]

    现在来看看第二种方法, 这种方法就比较笨一点. 但也很直观.  就是一个字符串的处理

     直接上代码:::

    $arr = explode("
    ", $str);
    $tmp = [];
    //这里取出带有2017字样的. 这里还可以改为带有2017.2.14日期字样的key和value
    foreach ($arr as $key => $value) { if (strstr($value, '2017')) { $tmp[$key][] = $value; $keyss[] = $key;//[0,3,8,11] } }
    //然后处理 -- 逻辑: 遍历keyss, 当指针的下一个值存在时.
    //并且符合条件$arr中的$kk介于$keyss value值的中间时, 才把$arr的value值取出, 放到相应的$tmp数组中;
    //但如果指针的下一个值不存在时, 即为数组的最后一个值, 那么这里就只要满足一个条件$v<$kk就可以了 foreach ($arr as $kk => $vv) { foreach ($keyss as $k => $v) { if (isset($keyss[$k+1])) { if ($v < $kk && $kk < $keyss[$k+1]) { $tmp[$v][] = $vv; } } else { if ($v < $kk) { $tmp[$v][] = $vv; } } } } p($tmp, $keyss, $arr);

    然后打印结果看看:

    {第二种: ---正确}

    {注: 里面的p()方法是自己写的一个数据输出方法,就一个var_dump, 大家不用在意}

    总结:  摒除一点效率而言, 最简单的方法往往是最有方便快捷的. 上述的两种方法各有长短, 第一种方法里的partent1 有待改善, 第二种方法循环的太多. 但各人有各人的方法.  但一般能不用正则的就尽量不用. 正则相比php的方法来说还是有一定的效率差...正则中的获取数据应用比较多的一是用于爬虫技术; 二是用于匹配判断,比如是匹配手机邮箱什么的.

    不足之处还有很多, 有什么问题希望留言让我改进,不胜感激!

  • 相关阅读:
    典型用户模版和场景
    第一冲刺阶段——个人工作总结05
    第一冲刺阶段——个人工作总结04
    第一冲刺阶段——个人工作总结03
    第一冲刺阶段——个人工作总结02
    第一冲刺阶段——个人工作总结01
    学习进度条7
    构建之法阅读笔记06
    个人总结
    第十六周进度条
  • 原文地址:https://www.cnblogs.com/wherein/p/6860260.html
Copyright © 2011-2022 走看看