Domanda

Mi sembra di essermi confuso con una regex preg_match che sto facendo, quindi occhi e aiuto nuovi sarebbero apprezzati.

La mia regex attuale è la seguente:

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

Sto cercando di inserire il numero e i due punti, ad es. : (1,4) facoltativo, quindi corrisponderebbe:

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

o

<!--menu:start:(0,3)--><!--menu:end-->
È stato utile?

Soluzione

Racchiudi con un gruppo non corrispondente e impostalo su facoltativo: (?:...)?

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

Altri suggerimenti

In questo modo:

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

Ho aggiunto un gruppo non acquisente, (?: ), intorno alla parte che si desidera sia facoltativa, quindi l'ho aggiunto con un punto interrogativo: (?:<optional content>)?

Questo utilizza un gruppo facoltativo non di acquisizione - (?: )? - per abbinare la parte opzionale e anche \d invece di [0-9] per abbinare le cifre:

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

Se i numeri tra parentesi possono contenere più di una cifra, utilizzare invece questa:

/<!--menu:start(?::\((\d+),(\d+)\))?-->(.*?)<!--menu:end-->/se
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top