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

最终处理结果为:

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

[第一种]:

// $partent1 = "/(\d{4}.\d{1,2}.\d{1,2}[\n\r]+[\x{4e00}-\x{9fa5}_a-zA-Z\n\r]+)/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("\n", $value);
}
p($match[0], $match_tmp, 'y');

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

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

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

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

{第一种: ---正确}

[第二种]

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

直接上代码:::

$arr = explode("\n", $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的方法来说还是有一定的效率差...正则中的获取数据应用比较多的一是用于爬虫技术; 二是用于匹配判断,比如是匹配手机邮箱什么的.

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

php 对字符串的分块处理的更多相关文章

  1. 为你的PHP程序选择合适的密码库(初稿)

    如果本文中的术语让你感到疑惑,请先参阅密码学术语及概念一文. 密码学不是魔术.加密一个应用程序并不能保证它在袭击下的安全(特别是在你没有设置验证密文的情况下).但如果出于商业需求你要确保程序的安全,传 ...

  2. NOIP2018:The First Step

    NOIP2018 RP=Ackermann(4,3) Day 0 日常不想做题也不知道要写什么qwq Day 1 接到$smy$巨佬的催更私信于是来更了(原本准备咕掉的) 最开始的策略是准备总览题目, ...

  3. 【二分答案】【分块答案】【字符串哈希】【set】bzoj2946 [Poi2000]公共串

    我们二分/分块枚举答案x,暴力把除了最短的字符串以外的其他字符串的x长度子串哈希搞出来,分别扔到set里. 然后暴力枚举最短的字符串的x长度字串,查看是否在全部的set里出现过. #include&l ...

  4. Harry And Biological Teacher 分块 + 字符串hash

    http://acm.hdu.edu.cn/showproblem.php?pid=5069 首先判断suffix和prefix最长多少可以直接暴力枚举长度然后 + hash可以立马判断是否相等,复杂 ...

  5. HTML5+AJAX原生分块上传文件的关键参数设置

    processData:false 这是jquery.ajax的一个参数.默认值为true,表示会将非字符串对象自动变成k1=v1&k2=v2的形式,例如一个数组参数{d:[1,2]},到服务 ...

  6. 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)

    QQ:231469242 欢迎喜欢nltk朋友交流 http://www.cnblogs.com/undercurrent/p/4754944.html 一.信息提取模型 信息提取的步骤共分为五步,原 ...

  7. 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类

    4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ...

  8. 索引查找(索引查找、分块查找) C语言实现

    1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ...

  9. HTTP分块传输

    HTTP分块传输 用途 对于在发送HTTP头部前,无法计算出Content-Length的HTTP请求及回复(例如WEB服务端产生的动态内容),可以使用分块传输,使得不至于等待所有数据产生后,再发送带 ...

随机推荐

  1. ionic 项目使用百度地图插件(cordova-qdc-baidu-location)

    现在我们使用'Weizhe He'提供的cordova-qdc-baidu-location来尝试创建简单的定位app. Stpe1:创建一个项目 Stpe2:申请百度地图API秘钥     应用类型 ...

  2. Android:singleTask + onActivityResult

    解决2个Activity互相跳转,并且栈中只保留每个Activity一个对象的存在. 在2个Activity中分别都要用到onActivityResult,所以就不能用launchMode=" ...

  3. ROC

    # -*- coding: utf-8 -*- # __author__ = "JieYao" from biocluster.agent import Agent from bi ...

  4. mysql处理大数据合并的另一种方法

    在做项目的时候我碰到了一个这样的场景,有两张表,数据都在300W左右,现在要求在生产环境中合并这两张表为一张表,本来想用sql语句insert into select来实现,后来发现这样操作速度很慢, ...

  5. Linux 网卡丢包严重

    http://hi.baidu.com/scstwy/item/cad0fbef1fdc18d3eb34c9d9

  6. linux 安装 登录 centos7

    常用资源下载 r.aminglinux.com centos7.aminglinux.com http://www.apelearn.com/study_v2/ 认识linux Debian Slac ...

  7. jquery的onclick(this)方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. EF(EntityFramework) Migrations 迁移

    1.开启程序包管理器控制台 2.安装EntityFramework PM> Install-Package EntityFramework   3.启用迁移 PM> Enable-Migr ...

  9. JUC组件扩展(一):FutureTask理解

    一.概述 FutureTask包装器是一种非常便利的机制,同时实现了Future和Runnable接口. 类图如下: FutureTask是一种可以取消的异步的计算任务.它的计算是通过Callable ...

  10. 3.2 Zend_Db_Select

    10.4. Zend_Db_Select 你能够使用该对象和它的对应方法构建一个select查询语句,然后生成 字符串符用来传送给zend_db_adapter进行查询或者读取结果. 你也能够在你的查 ...