operatore tilde nelle espressioni regolari
Domanda
Vorrei sapere qual è il significato di operatore tilde nelle espressioni regolari.
Ho questa dichiarazione:
if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
$warnings[] = 'ISBN should be 10 digits';
}
Ho trovato questo documento che spiega che cosa significa tilde: ~
Si dice che =~
è un operatore Perl che significa eseguire questa variabile contro questa espressione regolare.
Ma perché la mia espressione regolare contiene due operatori tilde?
Soluzione
In questo caso, è solo utilizzato come delimitatore.
In generale, in PHP, il primo e l'ultimo carattere di un'espressione regolare sono "delimitatori" per segnare l'inizio e la posizione finale di una porzione corrispondente (nel caso in cui si desidera aggiungere modificatori alla fine, come ungreedy, ecc)
Generalmente PHP funziona questo fuori dal primo carattere di una stringa che è pensato come espressione regolare, corrispondente alla seconda verificarsi di come secondo delimitatore. Questo è utile quando si dispone di un evento del delimitatore normale nel testo (ad esempio, occorrenze di /
nel testo) -. Questo significa che non c'è bisogno di fare le cose scomode
corrispondenza per "//
" con il delimitatore impostato su "/
"
/\/\//
corrispondenza per "//
" con il delimitatore di "#
"
#//#
Altri suggerimenti
In questo caso, non significa nulla. Si tratta semplicemente di delimitare l'inizio e la fine del vostro modello. In PCRE (Perl Compatible Regular Expressions), che è quello che si sta utilizzando con preg_ * in PHP, il modello è in ingresso lungo il lato le opzioni di espressione, in questo modo:
preg_match("/pattern/opt", ...);
Tuttavia, l'uso di "/" come delimitatore in questo caso è arbitraria - anche se slash è popolare, può essere sostituito con qualsiasi cosa. Nel tuo caso, si tratta di tilde.