Pregunta

Parece que me he confundido con una expresión regular preg_match que estoy haciendo, por lo que agradecería tener ojos frescos y ayuda.

Mi expresión regular actual es la siguiente:

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

Estoy buscando hacer la entrada del número y los dos puntos, p. : (1,4) opcional, por lo que coincidiría con:

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

o

<!--menu:start:(0,3)--><!--menu:end-->
¿Fue útil?

Solución

Adjunte con un grupo no coincidente y configúrelo como opcional: (?:...)?

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

Otros consejos

Me gusta esto:

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

Agregué un grupo que no captura, (?: ), alrededor de la parte que desea que sea opcional, y luego lo agregué con un signo de interrogación: (?:<optional content>)?

Esto utiliza un grupo opcional que no captura - (?: )? - para que coincida con su parte opcional, y también \d en lugar de [0-9] para que coincida con los dígitos:

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

Si los números entre paréntesis pueden constar de más de un dígito, use este en su lugar:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top