Re: [请益] 字串解析

楼主: weiclin (CC)   2016-12-22 02:52:39
※ 引述《aaa6542005 (Poppy)》之铭言:
: 现在取得一个电影时刻的长字串,字串中间也都没空白,如下:
: " 12月21日至12月22日:10:10、12:20、14:30、16:50、19:10、21:30、23:4012月23日
: :10:20、12:30、14:50、17:10、19:30、21:45、23:5512月24日至12月27日:10:10、
: 12:20、14:35、16:50、19:10、21:25 "
: 请问我该如何把这字串解析成类似上面那样?
: 我想要的结果类似这样:
: 12-21 12-22 => 10:10、12:20、14:30、16:50、19:10、21:30、23:40
: 12-23 => 10:20、12:30、14:50、17:10、19:30、21:45、23:55
: 12-24 12-25 12-26 12-27 => 10:10、12:20、14:35、16:50、19:10、21:25
: array或者json都可以
: 请问要怎样才能做到呢?
: 想一整个下午了><
: 拜托高手大大们帮我解惑
程式如下:
<?php
$data = " 12月21日至12月22日:10:10、12:20、14:30、16:50、19:10、21:30、23:4012月23日
:10:20、12:30、14:50、17:10、19:30、21:45、23:5512月24日至12月27日:10:10、
12:20、14:35、16:50、19:10、21:25 ";
// 把换行拿掉, 简化 regexp 复杂度
$data = str_replace(["\r", "\n"], "", $data);
$regexp = <<<END_REGEXP
/(
\d{2}月\d{2}日 # 几月几日
(?:至\d{2}月\d{2}日)? # 后面可能接着另一个日期
:
(?:\d{2}:\d{2}、?)+ # 冒号后面是 "小时:分钟" 格式,以 "、" 隔开
)/ux
END_REGEXP;
if (preg_match_all($regexp, $data, $matches)) {
var_dump($matches[1]);
}
输出如下:
array(3) {
[0]=>
string(77) "12月21日至12月22日:10:10、12:20、14:30、16:50、19:10、21:30、23:40"
[1]=>
string(64) "12月23日:10:20、12:30、14:50、17:10、19:30、21:45、23:55"
[2]=>
string(69) "12月24日至12月27日:10:10、12:20、14:35、16:50、19:10、21:25"
}
之后再针对这些切好的区段处理, 应该就简单了吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com