2009-06-02 6 views
44

Desidero sapere qual è il significato dell'operatore tilde nelle espressioni regolari.Operatore Tilde in 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: ~

dire che =~ è un operatore perl che significa eseguire questa variabile contro questa espressione regolare.

Ma perché fa la mia espressione regolare contiene due operatori tilde?

risposta

52

In questo caso, viene utilizzato solo come delimitatore.

Generalmente, in PHP, il primo e l'ultimo carattere di un'espressione regolare sono "delimitatori" per contrassegnare la posizione iniziale e finale di una porzione corrispondente (nel caso in cui si desideri 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 ha un'occorrenza del delimitatore normale nel testo (ad esempio, occorrenze di / nel testo) - questo significa che non devi fare cose strane.

Matching "//" con il delimitatore impostato su "/"

/\/\//

Matching "//" con il delimitatore di "#"

#//#

+1

ic, sono abituato al/delimitatore quindi ero un po 'confuso con il delimitatore ~. Grazie per il chiarimento. –

+0

Questo si applica solo alle PCRE http://docs.php.net/manual/en/book.pcre.php e non POSIX ERE http://docs.php.net/manual/en/book.regex.php – Gumbo

6

In questo caso, non significa nulla. Si tratta semplicemente delimitando l'inizio e la fine del tuo 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 "/" poiché il delimitatore in questo caso è arbitrario - sebbene la barra in avanti sia popolare, può essere sostituita con qualsiasi cosa. Nel tuo caso, è tilde.

+0

Oh, Ok .. Ho avuto l'espressione regolare dal libro .. Non hanno spiegato cosa significasse. Quindi è stato un po 'confuso. Stavo solo cercando di chiarire le cose perché sono confuso. Grazie! –

+0

'/' è popolare perché è il delimitatore standard per espressioni regolari perl, che è ciò che rappresenta preg;) –