-
06-07-2019 - |
题
我似乎把自己与我正在做的preg_match正则表达混淆了,所以新的眼睛和帮助将会受到赞赏。
我现在的正则表达式如下:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
我正在寻找数字输入和冒号,例如:(1,4)可选,所以它匹配:
<!--menu:start--><!--menu:end-->
或
<!--menu:start:(0,3)--><!--menu:end-->
解决方案
附上非匹配组并将其设置为可选:(?:...)?
/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se
其他提示
像这样:
/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
我在你想要选择的部分周围添加了一个非捕获组(?: )
,然后用问号加上后缀:(?:<optional content>)?
这使用可选的非捕获组 - (?: )?
- 来匹配您的可选部分,还使用\d
代替[0-9]
来匹配数字:
/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
如果括号中的数字可以包含多个数字,请改为使用此数字:
/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
不隶属于 StackOverflow