//如何把以下的字符串分成每一个小块, 如: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. CopyOnWriteArrayList操作java.lang.UnsupportedOperationException

    问题一:CopyOnWriteArrayList不能强制转换成ArrayList 解决的方法:将CopyOnWriteArrayList传入ArrayList中 ArrayList<T> ...

  2. 【BIEE】服务启动失败,查看错误日志

    Weblogic服务日志文件:------------------------------BI Managed Server:OBIEE_HOME\user_projects\domains\bifo ...

  3. 【Linux】压缩与解压

    一: 下面这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个: tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件 下面的参数是根据需要在 ...

  4. 计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)

    文本文件是可以看到的字符, 二进制文件是不可视字符,如图片. 二进制文件: 包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件.计算机文件基本上分为二种:二进制文件和 ASCII( ...

  5. windows Service 2012 系统时间格式带中文

    C# 获取DataTime.Now   显示     2019年4月23日 下午 10:03:00 导致转换格式失败, 因为 源码中写的是   DataTime.Now.ToString();   输 ...

  6. socket.io(转载)

    socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on(‘connec ...

  7. 使用forever运行nodejs应用

    使用forever运行nodejs应用 何为forever forever可以看做是一个nodejs的守护进程,能够启动,停止,重启我们的app应用. 官方的说明是说: A simple CLI to ...

  8. [MySQL] Innodb參数优化

    innodb_buffer_pool_size innodb_buffer_pool_size 參数用来设置Innodb 最基本的Buffer(Innodb_Buffer_Pool)的大小,也就是缓存 ...

  9. Bash中的括号(三)

    1.两个小括号用来对整数进行算术运算和逻辑运算,比如. 例如给变量赋值: $ a=+; echo $a + $ (( b = + )); echo $b 1+1 只是一个字符串,而 b 就是一个算术表 ...

  10. 反射学习1、反射机制的介绍和基本的API的使用

    关于动态语言: 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”.从这个观点看,Perl,Python,Ruby是动态语言,C+ ...