1
我有一個正則表達式模式和可選匹配的問題。基本上我試圖提取含工時的字符串信息,可能是以下3種形式:正則表達式模式和可選匹配
$d1 = 'Fr: 9-12;';
$d2 = 'Mo: 9-12 und 15-18; alle 14 Tage spez. Migräneberatung bis 20 Uhr;';
$d3 = 'Mo: 9-12; alle 14 Tage spez. Migräneberatung bis 20 Uhr;';
$regex = '
/
(Mo|Di|Mi|Do|Fr|Sa|So)+: # day follow by colon
\s+? # a optional space
(\d+)\-(\d+) # time from - to
(?:\s+?und\s+?(\d+)\-(\d+)) # optional time from - to
;
(?:([^;]+)) # optional addt info
/x';
$rc = preg_match_all($regex, $d2, $m);
print_r($m);
字符串$d2
工作沒有問題,我得到的所有預期的匹配,但琴絃$d1
和$d3
做不匹配。我嘗試使用第二個時間部分和附加信息文本進行可選分組,但它不起作用。我得到空的比賽。我看不到這個瑕疵...
我想用preg_match_all
來得到上述子串的所有匹配項,因爲它是一個很大的字符串,每個星期一到星期天上面的子串以$d1 - $d3
每天。我不知道是否也可以使用分號作爲這個子字符串結束標記,這就是爲什麼我試圖將它與([^;]+)
相匹配。 如果這不起作用,我可以選擇另一個分隔符來標記一天子字符串的結尾,並且首先拆分大字符串,並在循環中匹配子字符串。
我欣賞任何提示!先謝謝您的幫助!
確實,這是問題所在 - /感謝您的幫助:-) –