我似乎與我正在做的preg_match正則表達式相混淆,所以新鮮的眼睛和幫助將不勝感激。Regex可選組?
我現在的正則表達式如下:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
我期待使號碼輸入和結腸例如:(1,4)可選的,所以它會匹配:
<!--menu:start--><!--menu:end-->
或
<!--menu:start:(0,3)--><!--menu:end-->
我似乎與我正在做的preg_match正則表達式相混淆,所以新鮮的眼睛和幫助將不勝感激。Regex可選組?
我現在的正則表達式如下:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
我期待使號碼輸入和結腸例如:(1,4)可選的,所以它會匹配:
<!--menu:start--><!--menu:end-->
或
<!--menu:start:(0,3)--><!--menu:end-->
En密切與非匹配組,並將其設置爲可選:(?:...)?
/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se
像這樣:
我添加了一個非捕獲組,(?:)
,圍繞要選擇的部分,然後用問號將其後綴:(?:<optional content>)?
它使用一個可選的非捕獲組 - (?:)?
- 以符合您的可選部分,並且也\d
代替[0-9]
匹配數字:
如果括號中的數字可以由一個以上的數字的,用這個來代替:
/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
哈哈,這是一個密切的關係... :) – glmxndr 2009-06-22 09:14:50
確實,它=) – Blixt 2009-06-22 09:15:57