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-->
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top