php 对字符串的分块处理
//如何把以下的字符串分成每一个小块, 如: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 对字符串的分块处理的更多相关文章
- 为你的PHP程序选择合适的密码库(初稿)
		如果本文中的术语让你感到疑惑,请先参阅密码学术语及概念一文. 密码学不是魔术.加密一个应用程序并不能保证它在袭击下的安全(特别是在你没有设置验证密文的情况下).但如果出于商业需求你要确保程序的安全,传 ... 
- NOIP2018:The First Step
		NOIP2018 RP=Ackermann(4,3) Day 0 日常不想做题也不知道要写什么qwq Day 1 接到$smy$巨佬的催更私信于是来更了(原本准备咕掉的) 最开始的策略是准备总览题目, ... 
- 【二分答案】【分块答案】【字符串哈希】【set】bzoj2946 [Poi2000]公共串
		我们二分/分块枚举答案x,暴力把除了最短的字符串以外的其他字符串的x长度子串哈希搞出来,分别扔到set里. 然后暴力枚举最短的字符串的x长度字串,查看是否在全部的set里出现过. #include&l ... 
- Harry And Biological Teacher   分块 + 字符串hash
		http://acm.hdu.edu.cn/showproblem.php?pid=5069 首先判断suffix和prefix最长多少可以直接暴力枚举长度然后 + hash可以立马判断是否相等,复杂 ... 
- HTML5+AJAX原生分块上传文件的关键参数设置
		processData:false 这是jquery.ajax的一个参数.默认值为true,表示会将非字符串对象自动变成k1=v1&k2=v2的形式,例如一个数组参数{d:[1,2]},到服务 ... 
- 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)
		QQ:231469242 欢迎喜欢nltk朋友交流 http://www.cnblogs.com/undercurrent/p/4754944.html 一.信息提取模型 信息提取的步骤共分为五步,原 ... 
- 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类
		4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ... 
- 索引查找(索引查找、分块查找) C语言实现
		1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ... 
- HTTP分块传输
		HTTP分块传输 用途 对于在发送HTTP头部前,无法计算出Content-Length的HTTP请求及回复(例如WEB服务端产生的动态内容),可以使用分块传输,使得不至于等待所有数据产生后,再发送带 ... 
随机推荐
- ES6 字符串扩展
			1.字符串遍历接口 字符串可以被for...of循环遍历 'use strict'; for (let codePoint of 'foo') { //控制台输出f o o console.log(c ... 
- JDBC 使用SimpleJdbcTemplate实现Dao
			public interface UserDao { public void addUser(User user); public User getUser(int userId); ... 
- 你不知道的js技巧
			JS进阶 说起这个应该算是老生常谈了吧.所谓的高级,其实就是讲了一些我们平常用不到(或许用了不知道),但是非常实在的东西.算是熟练掌握js的一个必经road吧. 检测函数类型 其实检测函数的类型应该算 ... 
- UVALive 6529 Eleven 区间dp
			题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4540">点击打开链接 题意: ... 
- C#调用 oracle存储过程
			C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ... 
- 解决——CSS :before、:after ,当content使用中文时有时候会出现乱码
			问题: 在进行页面开发时,经常会使用:before, :after伪元素创建一些小tips,但是在:before或:after的content属性使用中文的话,会导致某些浏览器上出现乱码. 例如我遇到 ... 
- iOS直播-播放基于RTMP协议的视频
			iOS直播-播放基于RTMP协议的视频 流媒体协议介绍 1. 伪流媒体: 渐进式下载 : 边下边存, 文件会保存 使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像. 优酷, ... 
- 将json形式的时间字符串转换成正常的形式
			//重写time的getter方法 //判断addtime和当期的时间差 // < 60分钟 返回 n分钟前 // > 60分钟 返回 n小时前 //超过24小时 返回 -月-日 - ... 
- 0055 <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题
			刚才在折腾的时候,发现applicationContext.xml中配置了<mvc:default-servlet-handler />后,能访问静态资源,却不能访问动态资源了:注释掉之后 ... 
- javascript断点设置和调试
			JS调试必备的5个debug技巧http://www.jb51.net/article/47812.htm Chrome 中的 JavaScript 断点设置和调试技巧http://www.xuebu ... 
