Кажется, я запутался в регулярном выражении 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