
1 skydiver 2016-02-18 13:36:20 +08:00 正则表达式 |
2 Moker 2016-02-18 13:36:48 +08:00 正则匹配出来 然后替换为空 |
3 yhylord 2016-02-18 13:40:17 +08:00 使用 DateTime 库和一些字符串操作就可以了。 假设你一条字符串是$str 吧。 $arr = explode(',‘, $str); //将$str 用逗号分隔得到数组 $time_str = $arr[2]; //得到时间那一列 $time_obj = DateTime::createFromFormat('Y-m-d\TH:i:s\Z', $time_str); $expected_str = $time_obj -> format('Y-m-d'); //只保留日期 $arr[2] = $expected_str $str = join(',', $arr); 最后$str 就是去掉那一段之后的原字符串剩下的部分了。 变量名起得不好仅供示意。此外我也只会写一点 PHP ,有问题还望斧正。 p.s.: 楼主为什么一定要处理这种数据呢?总觉得这个问题是个 XY 问题。 |
5 yhylord 2016-02-18 13:41:51 +08:00 在我看来如果有库实现了这些格式的处理那最好不要自己写正则了。即使写多点代码也省时省力。 |
6 xuhaoyangx 2016-02-18 13:44:15 +08:00 preg_replace("/T[\d]{2}:[\d]{2}:[\d]{2}Z/", "", $msg) 随便写的,错了误笑^^ |
7 flydogs 2016-02-18 13:47:49 +08:00 一些文本编辑器,可以正则替换的。 |
8 risingsun 2016-02-18 13:52:19 +08:00 $cOntent= preg_replace('/T.*Z/', '', $content); |
9 br00k 2016-02-18 13:57:20 +08:00 $str = "6688.club,已经注册,2014-05-07T15:02:16Z,2016-05-06"; echo preg_replace('/\w\d\d\:\d\d\:\d\d\w/',"",$str); |
10 moro 2016-02-18 13:58:43 +08:00 正则表达式有个递归限制,如果内容太多,需要分批处理,或者按行处理。 |
11 em70 2016-02-18 14:01:26 +08:00 如此标准的数据,先'逗号'分隔每一行文本,获得 2014-05-07T15:02:16Z 这类数据,然后用'T'分隔提取 T15:02:16Z,替换原数据的这个字符串为空即可 PS:鄙视楼主伸手党,一点点代码都不愿意写 |
14 CosWind 2016-02-18 14:35:04 +08:00 cat filename | sed 's/\([^T]*\)T[^Z]*Z\(.*\)/\1\2/' |
15 iyaozhen 2016-02-18 14:35:39 +08:00 @em70 再帮楼主一把: date_default_timezone_set("Asia/Shanghai"); echo date("Y-m-d H:i:s", strtotime("2014-05-07T15:02:16Z")); 结果: 2014-05-07 23:02:16 「 2015-06-17T15:43:28Z 」本身就是一个标准时间表示,但忘记是啥了。 楼主应该需要把上游日志打好。 |
16 yumijie OP 谢谢楼上诸位,我刚刚借鉴楼上一位朋友的代码实现了功能: <?php $handle = @fopen ("4.txt","r" ); if ( $handle ) { while (( $buffer = fgets ($handle ,4096 )) !== false ) { // echo $buffer."<br>\n"; echo preg_replace('/\w\d\d\:\d\d\:\d\d\w/',"",$buffer)."<br>\n"; } if (! feof ( $handle )) { echo "Error: unexpected fgets() fail\n" ; } fclose ( $handle ); } ?> 其实通篇就是: echo preg_replace('/\w\d\d\:\d\d\:\d\d\w/',"",$buffer)."<br>\n"; 这句代码管用,然后再遍历下文本文件。 |
17 vincenttone 2016-02-18 16:04:24 +08:00 读文件即可,正则不用那么复杂 ``` <?php $a = '6688.club,已经注册,2014-05-07T15:02:16Z,2016-05-06'; $x = preg_replace('/(T.+?Z)/', '',$a); echo $x; ``` linux 下直接 sed 就可以了 ``` cat 6691.club|sed 's/T.*Z//' ``` |
18 vincenttone 2016-02-18 16:06:01 +08:00 @vincenttone 写错了文件名,是 cat 4.txt|sed 's/T.*Z//' 不过看后缀似乎是 windows |
19 xuxu 2016-02-18 16:16:23 +08:00 preg_replace('#T[0-9\:]+Z#imu','',$str); $str 就是你的字符串。 |
20 Xrong 2016-02-18 18:23:36 +08:00 如果量不大的话,直接用 vim 块选择,直接删除就好了 |
21 Xrong 2016-02-18 18:24:25 +08:00 或者 vim 录制一个宏,也非常快 |
22 terrancy 2016-02-18 19:17:13 +08:00 strpos() 这个函数可以获取指定的位置再截取就好了;不过上面的比较简单,每一行的长度都一样,T 和 Z 在字符串中的位置都固定的.通过位置截取指定长度也可以实现.数据量少的话正则的肯定更好. |
23 changlers 2016-02-18 19:48:10 +08:00 preg_replace('/T[0-9:]+Z/i','',$object); |
24 lshero 2016-02-18 20:00:48 +08:00 via Android 直接当 csv 处理不行嘛 |
25 vibbow 2016-02-18 21:18:33 +08:00 其实直接 substr 就行了啊... |
26 hqs123 2016-02-19 08:48:40 +08:00 正则表达式可以 |
27 a2231243 2016-02-19 11:01:03 +08:00 preg_replace('/T.*Z/', '', $str) |
28 helieting 2016-03-09 03:59:33 +08:00 via iPhone Vim 吧 |