我似乎与我正在做的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