正則表達式與命名的模式:
/(?P<day>Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:-(?P<today>Mon|Tue|Wed|Thu|Fri|Sat|Sun))?\s+(?P<from>(?<=\s)(?:(?:2[0-3])|(?:[01]?[0-9]))(?:\:[0-5][0-9])?)-(?P<till>(?<=-)(?:(?:2[0-3])|(?:[01]?[0-9]))(?:\:[0-5][0-9])?)/g
http://regex101.com/r/cP8rQ4
它匹配所有這些:「週五12-02,週六15:30-03,12-02星期一,星期一15- 03,週一 - 週四8:30-16:45「,並給你一個帶有指定鍵(天,今天,從,直到)的數組。 爲此,您必須使用preg_match_all
和PREG_SET_ORDER
。
輸出示例:
array(
array(
'day' => 'Fri',
'from' => '12',
'till' => '02'
), array(
'day' => 'Sat',
'from' => '15:30',
'till' => '03'
), array(
'day' => 'Mon',
'from' => '12',
'till' => '02'
), array(
'day' => 'Mon',
'from' => '15',
'till' => '03'
), array(
'day' => 'Mon',
'today' => 'Thu',
'from' => '8:30',
'till' => '16:45'
)
);
至少IM,如果不知道它是PREG_SET_ORDER
或PREG_PATTERN_ORDER
只是嘗試。
這是什麼格式?它應該匹配什麼?它應該拒絕什麼? – Ghost
你正在尋找一種方法來驗證前三個字符是在 - 星期一,星期二,星期三,星期四,星期五,星期六,星期日 - 第5和第6個字符在00和24之間,第7個字符是' - '第8和第9個字符是在00和24之間? –
嗯,這是開放時間('星期五')和時間('12 - 02',如12:00至02:00)。它應該拒絕任何不符合理想模式的東西。所以 –