Regex Grupos Opcional?
-
06-07-2019 - |
Pergunta
Eu pareço ter me confundido com um preg_match regex que eu estou fazendo, olhos tão fresco e ajuda seria apreciada.
O meu regex atual é a seguinte:
/<!--menu:start:\(([0-9])\,([0-9])\)-->(.*?)<!--menu:end-->/se
Eu estou olhando para fazer a entrada de número e de cólon, por exemplo : (1,4) opcional, por isso seria jogo:
<!--menu:start--><!--menu:end-->
ou
<!--menu:start:(0,3)--><!--menu:end-->
Solução
encerrar com um grupo sem correspondência e configurá-lo para opcional: (?:...)?
/<!--menu:start(?::\(([0-9])\,([0-9])\))?-->(.*?)<!--menu:end-->/se
Outras dicas
Como esta:
/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
Eu adicionei um grupo de não captura, (?: )
, em torno da parte que deseja ser opcional e, em seguida, o sufixo-lo com um ponto de interrogação: (?:<optional content>)?
Isto usa um não-captura de grupo opcional - (?: )?
- para corresponder à sua parte opcional, e também \d
vez de [0-9]
para coincidir com dígitos:
/<!--menu:start(?::\((\d),(\d)\))?-->(.*?)<!--menu:end-->/se
Se os números entre parênteses pode consistir em mais do que um dígito, use esta em vez disso:
/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se