Regex Gruppi opzionali?
-
06-07-2019 - |
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-->
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