正则表达式可选组?

Joe*_*oel 15 php regex preg-replace preg-match

我似乎把自己与preg_match正则表达式混淆了,我正在做,所以新鲜的眼睛和帮助将不胜感激.

我目前的正则表达式如下:

/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)

我想要输入数字和冒号,例如:(1,4)可选,所以它匹配:

<!--menu:start--><!--menu:end-->
Run Code Online (Sandbox Code Playgroud)

要么

<!--menu:start:(0,3)--><!--menu:end-->
Run Code Online (Sandbox Code Playgroud)

glm*_*ndr 31

使用非匹配组并将其设置为可选: (?:...)?

/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)


Bli*_*ixt 28

像这样:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)

我添加了一个非捕获组,(?: )在您想要选择的部分周围,然后用问号加上后缀:(?:<optional content>)?

  • +1使用`\ d`而不是'0-9`.未来证明了这个问题,因为社会增加了新的数字,比如十一. (8认同)

Hel*_*len 5

这使用可选的非捕获组 - (?: )?- 匹配您的可选部分,而\d不是[0-9]匹配数字:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)

如果括号中的数字可以包含多个数字,请使用以下数字:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
Run Code Online (Sandbox Code Playgroud)