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