正则表达式可选组?

2022-08-30 21:28:47

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

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

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

我希望使数字输入和冒号(例如:(1,4)可选,因此它将匹配:

<!--menu:start--><!--menu:end-->

<!--menu:start:(0,3)--><!--menu:end-->

答案 1

用不匹配的组括起来,并将其设置为可选:(?:...)?

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

答案 2

喜欢这个:

/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se

我在要成为可选部件的周围添加了一个非捕获组,然后用问号作为后缀:(?: )(?:<optional content>)?


推荐