[請益] 用preg_match_all找pattern

作者: jacobcan118 (jacobcan118)   2014-04-05 08:50:02
請問我想用preg_match_all找下面的patten怎樣寫法會比較好?謝謝
$string = "f1/f2/f3/f4"
f1,f2,f3,f4用"/"分開 f1, f2,f3,f4可有可無
f1:數字0到23, 可多個數字,每數字用","分開, 有range形式為 "數字-數字". 如 0,2-23,7
f2:數字1到31,可多個數字,每數字用","分開 如 0,18,9,23,31
f3:數字0到6,可多個數字,每數字用","分開 如 0,1,3,7
f4:數字0到11,可多個數字,每數字用","分開 如 0,1,7,11

$string = ///;
$string = 0,2-23,7//0,1,3,7/;
$string = 1,4/0,5,23/2,0,1,3/0,4;
作者: alog (A肉哥)   2014-04-05 19:55:00
寫一個function用explode處理就好個人覺得用preg_match處理這種特殊狀況有點難維護code容易有例外
作者: jacobcan118 (jacobcan118)   2014-04-06 12:37:00
感謝.我原本想用explode再查count(array)再用foreach找不是empty的值不過感覺太麻煩想知道有沒更好方法
作者: mmis1000 (秋月戀楓)   2014-04-06 14:57:00
單純確認格式是辦得到拉,但用regex確認數字範圍很奇怪啊
作者: jacobcan118 (jacobcan118)   2014-04-07 05:03:00
感謝.但如果想用regex要如何確認數字0到10.(\d|1\d)嗎
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-07 12:14:00
這樣不是0-19。(\d|10)不就結了。http://www.regextester.com/
作者: jacobcan118 (jacobcan118)   2014-04-08 12:17:00
抱歉手誤是0-19想用preg_match_all出來的array拿值,不過會分不出1和1X
作者: alog (A肉哥)   2014-04-08 16:03:00
explode explode explode foreach等解出來function已經寫完了 效能也不錯 之後改規則也好調整
作者: mmis1000 (秋月戀楓)   2014-04-08 18:29:00
用(?:分支一|分支二)的寫法,可以做出兩層以上分支

Links booklink

Contact Us: admin [ a t ] ucptt.com