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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top