Acquistare padronanza delle espressioni normali in PHP
| by Dennis Pallett | March 28, 2005
Che cosa sono espressioni normali?
Un'espressione normale è un modello che può abbinare le varie stringhe di testo. Usando le espressioni normali potete trovare (e sostituire) determinati modelli del testo, per esempio “tutte le parole che cominciano con la lettera A„ o “trovano soltanto i numeri di telefono„. Le espressioni normali sono usate spesso nei codici categoria di convalida, perché sono un attrezzo realmente potente per verificare gli indirizzi di E-mail, numeri di telefono, indirizzi della via, codici di postale e più.
In questa lezione privata li mostrerò come le espressioni normali funzionano in PHP e gli dò un'introduzione corta sulla scrittura delle vostre proprie espressioni normali. Inoltre gli fornirò parecchi l'esempio espressioni normali che sono usate spesso.
Espressioni normali in PHP
Usando il regex (espressioni normali) è realmente facile in PHP e là è parecchie funzioni che esistono per fare il regex che trova e che sostituisce. Iniziamo con un ritrovamento semplice del regex.
Avere uno sguardo alla documentazione della funzione del preg_match (http://php.net/preg_match). Come potete vedere dalla documentazione, il preg_match è usato per effettuare un'espressione normale. In questo caso nessuna sostituzione è fatta, solo un ritrovamento semplice. Copy il codice qui sotto per dargli un try.<? l'esempio di php//string$str = “troviamo < bla > del roba fra </bla> queste due staffe precedenti„; /effettuiamo regex$do = il preg_match („/<bla> (. *) < /bla>/“, $str, $matches); /controllo se il regex fosse successfulif ($do = allineare) {// ha abbinato qualcosa, mostra i htmlentities abbinati di eco della stringa ($matches [“0„]); // inoltre come il testo fra le modifiche echeggia “il <br/>„. $matches [“1„];} altrimenti {// nessun eco del fiammifero “non potrebbe trovare un fiammifero„;}? >
Dopo facendo funzionare il codice, è probabilmente una buona idea se faccio un funzionamento rapido con il codice. Basicamente, il nucleo intero di suddetto codice è la linea che contiene il preg_match. La prima discussione è il vostro modello del regex. Ciò è probabilmente l'più importante. Più tardi in questa lezione privata, spiegherò alcune espressioni normali di base, ma se realmente desiderate imparare l'espressione normale allora è meglio se osservate su Google per gli esempi normali specifici di espressione.
La seconda discussione è la stringa tematica. Presuppongo che non ha bisogno di spiegazione. Per concludere, la terza discussione può essere facoltativa, ma se desiderate ottenere il testo abbinato, o il testo fra qualcosa, esso è una buona idea usarla (appena come la ho usata nell'esempio).
La funzione del preg_match si arresta dopo che abbia trovato il primo fiammifero. Se desiderate trovare TUTTI I fiammiferi in una stringa, dovete usare la funzione del preg_match_all (http://www.php.net/preg_match_all). Quel funziona abbastanza il molto stesso, così là è necessità di spiegarla esclusivamente.
Ora che abbiamo avuti individuazione, facciamo una trov-e-sostituzione, con la funzione del preg_replace (http://www.php.net/preg_replace). La funzione del preg_replace funziona abbastanza simile alla funzione del preg_match, ma preferibilmente ci è un'altra discussione per la stringa del rimontaggio. Copy il codice qui sotto e it.< funzionato? l'esempio di php//string$str = “sostituiamo il <bla>stuff between</bla> che il bla inquadra„; /fare il preg replace$result = preg_replace ("/<bla> (. *) < /bla>/“, “<bla>new stuff</bla>„, $str); htmlentities di eco ($result);? >
Il risultato allora sarebbe la stessa stringa, a meno che ora dicesse “il nuovo roba„ fra le modifiche di bla. Ciò è naturalmente appena un esempio semplice ed i rimontaggi più avanzati possono essere fatti.
Potete anche usare le chiavi nella stringa del rimontaggio. Dire che ancora desiderate il testo fra le staffe ed appena aggiungete qualcosa? Usate i $1, i $2, le chiavi ecc per quelle. Per esempio: <? l'esempio di php//string$str = “sostituiamo il <bla>stuff between</bla> che il bla inquadra„; /fare il preg replace$result = preg_replace ("/<bla> (. *) < /bla>/“, “roba del <bla>new (il vecchio: $1) </bla>„, $str); htmlentities di eco ($result);? >
Ciò allora stamperebbe “sostituiamo il nuovo roba (il vecchio: roba in mezzo) che il bla inquadra„. $2 hanno luogo per il secondo “interfer-tutto„, $3 per il terzo, ecc.
Quello è a questo proposito per le espressioni normali. Sembra molto difficile, ma una volta che afferrate è estremamente facile tuttavia uno degli attrezzi più potenti quando si programma in PHP. Non posso contare il numero di volte che il regex lo ha conservato dalle ore delle funzioni difficili del testo di codificazione.
Un esempio
Che cosa una buona lezione privata sarebbe senza alcuni esempi reali? In primo luogo abbiamo uno sguardo ad una funzione semplice di convalida di E-mail. Un indirizzo di E-mail deve cominciare con le lettere o i numeri, allora hanno @, allora un dominio, concludentesi con un'estensione. Il regex per quello sarebbe qualcosa di simile: ^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$
Lasciarlo rapidamente spiegare quel regex. Basicamente, la prima parte dice che deve tutto essere lettere o numeri. Allora otteniamo @ e dopo quello là dovrebbe essere lettere e/o numeri ancora (il dominio). Infine controlliamo un periodo ed allora per vedere se c'è un'estensione. Il codice per usare questo regex assomiglia a questo: <? php//buon e-mail$good = “john@example.com„; /difettoso e-mail$bad = “blabla@blabla„; /controlliamo il buon e-mailif (preg_match („/^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $good)) {eco “E-mail valido„;} altrimenti {eco “E-mail non valido„;}eco “<br/>„; /e controllare il e-mailif difettoso (preg_match („/^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $bad)) {eco “E-mail valido„;} altrimenti {eco “E-mail non valido„;}? >
Il risultato di questo sarebbe “E-mail valido. E-mail non valido„, naturalmente. Abbiamo controllato appena se un indirizzo di E-mail è valido. Se spostate il suddetto codice in una funzione, vi siete ottenuto una funzione di convalida di E-mail. Tenere presente comunque che il regex non è perfetto: dopo tutto, non controlla se l'estensione sia troppo lunga, esso? Poiché desidero mantenere questo short d'istruzione, non darò l'esperto regex, ma potete trovarli facilmente via Google.
Un altro esempio
Un altro esempio grande sarebbe un numero di telefono. Opinione desiderate verificare che numeri di telefono ed assicurarsi era nella disposizione corretta. Presupponiamo che desiderate i numeri essere nella disposizione di xxx-xxxxxxx. Che il codice osserverebbe qualcosa di simile: <? php//buon number$good = “123-4567890„; /difettoso number$bad = “45-3423423„; /controllare buon numberif (preg_match („/ d {3} - d {7}/“, $good)) {eco “numero valido„;} altrimenti {eco “numero non valido„;}eco “<br/>„; /e controllano difettoso numberif (preg_match („/ d {3} - d {7}/“, $bad)) {eco “numero valido„;} altrimenti {eco “numero non valido„;}? >
Il regex è ragionevolmente semplice, perché noi usano D. Ciò significa basicamente “il fiammifero tutta la cifra„ con la lunghezza dietro esso. In questo esempio in primo luogo cerca 3 cifre, allora “-„ (trattino) ed infine 7 cifre. Funziona perfettamente e fa esattamente che cosa desideriamo.
Che cosa è esattamente possibile con le espressioni normali?
Le espressioni normali sono realmente una degli attrezzi più potenti in PHP, o qualunque altra lingua per quella materia (potete usarli nelle vostre regole del mod_rewrite pure!). Ci sono così tanto voi possono fare con regex ed abbiamo graffiato soltanto la superficie in questa lezione privata con alcuni esempi molto di base.
Se realmente desiderate scavarli in regex suggerirli ricerca su Google per più lezioni private e la prova per imparare la sintassi del regex. Non è facile e ci è abbastanza una curva imparante ripida (nel mio parere), ma il senso migliore imparare è passare con gli esempi molto e prova a tradurlo nell'inglese normale. Realmente aiuti voi impara la sintassi.
In avvenire dedicherò rigorosamente un articolo completo agli esempi, compreso quei più avanzati, senza alcuna spiegazione. Ma per ora, posso soltanto dargli i collegamenti ad altre lezioni private:
La lezione privata minuta di 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Un'espressione normale è un modello che può abbinare le varie stringhe di testo. Usando le espressioni normali potete trovare (e sostituire) determinati modelli del testo, per esempio “tutte le parole che cominciano con la lettera A„ o “trovano soltanto i numeri di telefono„. Le espressioni normali sono usate spesso nei codici categoria di convalida, perché sono un attrezzo realmente potente per verificare gli indirizzi di E-mail, numeri di telefono, indirizzi della via, codici di postale e più.
In questa lezione privata li mostrerò come le espressioni normali funzionano in PHP e gli dò un'introduzione corta sulla scrittura delle vostre proprie espressioni normali. Inoltre gli fornirò parecchi l'esempio espressioni normali che sono usate spesso.
Espressioni normali in PHP
Usando il regex (espressioni normali) è realmente facile in PHP e là è parecchie funzioni che esistono per fare il regex che trova e che sostituisce. Iniziamo con un ritrovamento semplice del regex.
Avere uno sguardo alla documentazione della funzione del preg_match (http://php.net/preg_match). Come potete vedere dalla documentazione, il preg_match è usato per effettuare un'espressione normale. In questo caso nessuna sostituzione è fatta, solo un ritrovamento semplice. Copy il codice qui sotto per dargli un try.<? l'esempio di php//string$str = “troviamo < bla > del roba fra </bla> queste due staffe precedenti„; /effettuiamo regex$do = il preg_match („/<bla> (. *) < /bla>/“, $str, $matches); /controllo se il regex fosse successfulif ($do = allineare) {// ha abbinato qualcosa, mostra i htmlentities abbinati di eco della stringa ($matches [“0„]); // inoltre come il testo fra le modifiche echeggia “il <br/>„. $matches [“1„];} altrimenti {// nessun eco del fiammifero “non potrebbe trovare un fiammifero„;}? >
Dopo facendo funzionare il codice, è probabilmente una buona idea se faccio un funzionamento rapido con il codice. Basicamente, il nucleo intero di suddetto codice è la linea che contiene il preg_match. La prima discussione è il vostro modello del regex. Ciò è probabilmente l'più importante. Più tardi in questa lezione privata, spiegherò alcune espressioni normali di base, ma se realmente desiderate imparare l'espressione normale allora è meglio se osservate su Google per gli esempi normali specifici di espressione.
La seconda discussione è la stringa tematica. Presuppongo che non ha bisogno di spiegazione. Per concludere, la terza discussione può essere facoltativa, ma se desiderate ottenere il testo abbinato, o il testo fra qualcosa, esso è una buona idea usarla (appena come la ho usata nell'esempio).
La funzione del preg_match si arresta dopo che abbia trovato il primo fiammifero. Se desiderate trovare TUTTI I fiammiferi in una stringa, dovete usare la funzione del preg_match_all (http://www.php.net/preg_match_all). Quel funziona abbastanza il molto stesso, così là è necessità di spiegarla esclusivamente.
Ora che abbiamo avuti individuazione, facciamo una trov-e-sostituzione, con la funzione del preg_replace (http://www.php.net/preg_replace). La funzione del preg_replace funziona abbastanza simile alla funzione del preg_match, ma preferibilmente ci è un'altra discussione per la stringa del rimontaggio. Copy il codice qui sotto e it.< funzionato? l'esempio di php//string$str = “sostituiamo il <bla>stuff between</bla> che il bla inquadra„; /fare il preg replace$result = preg_replace ("/<bla> (. *) < /bla>/“, “<bla>new stuff</bla>„, $str); htmlentities di eco ($result);? >
Il risultato allora sarebbe la stessa stringa, a meno che ora dicesse “il nuovo roba„ fra le modifiche di bla. Ciò è naturalmente appena un esempio semplice ed i rimontaggi più avanzati possono essere fatti.
Potete anche usare le chiavi nella stringa del rimontaggio. Dire che ancora desiderate il testo fra le staffe ed appena aggiungete qualcosa? Usate i $1, i $2, le chiavi ecc per quelle. Per esempio: <? l'esempio di php//string$str = “sostituiamo il <bla>stuff between</bla> che il bla inquadra„; /fare il preg replace$result = preg_replace ("/<bla> (. *) < /bla>/“, “roba del <bla>new (il vecchio: $1) </bla>„, $str); htmlentities di eco ($result);? >
Ciò allora stamperebbe “sostituiamo il nuovo roba (il vecchio: roba in mezzo) che il bla inquadra„. $2 hanno luogo per il secondo “interfer-tutto„, $3 per il terzo, ecc.
Quello è a questo proposito per le espressioni normali. Sembra molto difficile, ma una volta che afferrate è estremamente facile tuttavia uno degli attrezzi più potenti quando si programma in PHP. Non posso contare il numero di volte che il regex lo ha conservato dalle ore delle funzioni difficili del testo di codificazione.
Un esempio
Che cosa una buona lezione privata sarebbe senza alcuni esempi reali? In primo luogo abbiamo uno sguardo ad una funzione semplice di convalida di E-mail. Un indirizzo di E-mail deve cominciare con le lettere o i numeri, allora hanno @, allora un dominio, concludentesi con un'estensione. Il regex per quello sarebbe qualcosa di simile: ^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$
Lasciarlo rapidamente spiegare quel regex. Basicamente, la prima parte dice che deve tutto essere lettere o numeri. Allora otteniamo @ e dopo quello là dovrebbe essere lettere e/o numeri ancora (il dominio). Infine controlliamo un periodo ed allora per vedere se c'è un'estensione. Il codice per usare questo regex assomiglia a questo: <? php//buon e-mail$good = “john@example.com„; /difettoso e-mail$bad = “blabla@blabla„; /controlliamo il buon e-mailif (preg_match („/^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $good)) {eco “E-mail valido„;} altrimenti {eco “E-mail non valido„;}eco “<br/>„; /e controllare il e-mailif difettoso (preg_match („/^ [a-zA-Z0-9_ . -] + . di +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $bad)) {eco “E-mail valido„;} altrimenti {eco “E-mail non valido„;}? >
Il risultato di questo sarebbe “E-mail valido. E-mail non valido„, naturalmente. Abbiamo controllato appena se un indirizzo di E-mail è valido. Se spostate il suddetto codice in una funzione, vi siete ottenuto una funzione di convalida di E-mail. Tenere presente comunque che il regex non è perfetto: dopo tutto, non controlla se l'estensione sia troppo lunga, esso? Poiché desidero mantenere questo short d'istruzione, non darò l'esperto regex, ma potete trovarli facilmente via Google.
Un altro esempio
Un altro esempio grande sarebbe un numero di telefono. Opinione desiderate verificare che numeri di telefono ed assicurarsi era nella disposizione corretta. Presupponiamo che desiderate i numeri essere nella disposizione di xxx-xxxxxxx. Che il codice osserverebbe qualcosa di simile: <? php//buon number$good = “123-4567890„; /difettoso number$bad = “45-3423423„; /controllare buon numberif (preg_match („/ d {3} - d {7}/“, $good)) {eco “numero valido„;} altrimenti {eco “numero non valido„;}eco “<br/>„; /e controllano difettoso numberif (preg_match („/ d {3} - d {7}/“, $bad)) {eco “numero valido„;} altrimenti {eco “numero non valido„;}? >
Il regex è ragionevolmente semplice, perché noi usano D. Ciò significa basicamente “il fiammifero tutta la cifra„ con la lunghezza dietro esso. In questo esempio in primo luogo cerca 3 cifre, allora “-„ (trattino) ed infine 7 cifre. Funziona perfettamente e fa esattamente che cosa desideriamo.
Che cosa è esattamente possibile con le espressioni normali?
Le espressioni normali sono realmente una degli attrezzi più potenti in PHP, o qualunque altra lingua per quella materia (potete usarli nelle vostre regole del mod_rewrite pure!). Ci sono così tanto voi possono fare con regex ed abbiamo graffiato soltanto la superficie in questa lezione privata con alcuni esempi molto di base.
Se realmente desiderate scavarli in regex suggerirli ricerca su Google per più lezioni private e la prova per imparare la sintassi del regex. Non è facile e ci è abbastanza una curva imparante ripida (nel mio parere), ma il senso migliore imparare è passare con gli esempi molto e prova a tradurlo nell'inglese normale. Realmente aiuti voi impara la sintassi.
In avvenire dedicherò rigorosamente un articolo completo agli esempi, compreso quei più avanzati, senza alcuna spiegazione. Ma per ora, posso soltanto dargli i collegamenti ad altre lezioni private:
La lezione privata minuta di 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Article Source: http://www.articleset.com

You are welcome to publish or reprint this article free of charge, provided:
- you include the entire article, unchanged, including the "About The Author" box
- all hyperlinks remain active, including the bottom ArticleSet.com link (does not apply to print publications)
- you agree not to hold the authors nor ArticleSet.com liable for any loss profits, expenses, or any other damages resulting from the use or misuse of articles published on this website