Re: [請益] 字串解析

看板PHP作者 (CC)時間8年前 (2016/12/22 02:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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" } 之後再針對這些切好的區段處理, 應該就簡單了吧? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.68.230.200 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1482346361.A.EF9.html
文章代碼(AID): #1OMizvxv (PHP)
文章代碼(AID): #1OMizvxv (PHP)