正则表达式可选组?
我似乎对我正在做的 preg_match 正则表达式感到困惑,所以新鲜的眼光和帮助将不胜感激。
我当前的正则表达式如下:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
我希望使数字输入和冒号例如:(1,4)可选,因此它会匹配:
<!--menu:start--><!--menu:end-->
或
<!--menu:start:(0,3)--><!--menu:end-->
I seem to have confused myself with a preg_match regex I'm doing, so fresh eyes and help would be appreciated.
My current regex is as follows:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
I am looking to make the number input and colon e.g. :(1,4) optional, so it would match:
<!--menu:start--><!--menu:end-->
or
<!--menu:start:(0,3)--><!--menu:end-->
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
用不匹配的组括起来并将其设置为可选:
(?:...)?
Enclose with a non matching group and set it to optional :
(?:...)?
像这样:
我在您想要可选的部分周围添加了一个非捕获组
(?: )
,然后用问号作为后缀:(?:< ;可选内容>)?
Like this:
I've added a non-capturing group,
(?: )
, around the part you want to be optional, and then suffixed it with a question mark:(?:<optional content>)?
这使用可选的非捕获组 -
(?: )?
- 来匹配您的可选部分,并且还使用\d
而不是[0-9 ]
匹配数字:如果括号中的数字可以包含多个数字,请改用此数字:
This uses an optional non-capturing group --
(?: )?
-- to match your optional part, and also\d
instead of[0-9]
to match digits:If numbers in parentheses can consist of more than one digit, use this one instead: