Le espressioni regolari sono un linguaggio a parte. Quando impari un nuovo linguaggio di programmazione, sono una piccola sottotagina che non ha senso a prima vista. Molte volte devi leggere un altro tutorial, articolo o libro solo per capire il modello "semplice" descritto. Oggi esamineremo otto espressioni regolari che dovresti conoscere per il tuo prossimo progetto di codifica.
Prima di iniziare, potresti voler controllare alcune delle app regex su Envato Market, come ad esempio:
Puoi estrarre email, proxy, IP, numeri di telefono, indirizzi, tag HTML, URL, link, date, ecc. Basta inserire una o più espressioni regolari e URL di fonti e avviare il processo.
Estrarre, raschiare, analizzare, raccogliere.
Questo elemento è un builder PHP RegEx, che ti aiuta a costruire espressioni regolari in una sintassi PHP estensibile. Puoi:
Tutto ciò in una sintassi PHP. Niente più teste rotte che cercano di fare RegEx di base o complesso!
Questo è ciò che Wikipedia ha da dire su di loro:
Nel calcolo, le espressioni regolari forniscono un mezzo conciso e flessibile per identificare stringhe di testo di interesse, come caratteri particolari, parole o modelli di caratteri. Le espressioni regolari (abbreviate come regex o regexp, con forme plurali regexes, regexp o regexen) sono scritte in un linguaggio formale che può essere interpretato da un processore di espressioni regolari, un programma che funge da generatore di parser o esamina il testo e identifica le parti che corrisponde alle specifiche fornite.
Ora, questo non mi dice molto sugli schemi attuali. Le regex di cui parlerò oggi contengono caratteri come \ w, \ s, \ 1 e molti altri che rappresentano qualcosa di completamente diverso da quello che sembrano.
Se desideri imparare un po 'sulle espressioni regolari prima di continuare a leggere questo articolo, ti suggerisco di guardare le serie di screencast di Regular Expressions for Dummies.
Le otto espressioni regolari che esamineremo oggi ti consentiranno di abbinare un (n): nome utente, password, email, valore esadecimale (come #fff o # 000), slug, URL, indirizzo IP e un tag HTML. Man mano che l'elenco si interrompe, le espressioni regolari diventano sempre più confuse. Le immagini per ogni regex all'inizio sono facili da seguire, ma le ultime quattro sono più facilmente comprensibili leggendo la spiegazione.
La cosa fondamentale da ricordare sulle espressioni regolari è che sono quasi letti avanti e indietro allo stesso tempo. Questa frase avrà più senso quando parliamo di abbinare i tag HTML.
Nota: I delimitatori utilizzati nelle espressioni regolari sono barre inverse, "/". Ogni modello inizia e termina con un delimitatore. Se una barra in avanti appare in un'espressione regolare, dobbiamo sfuggire con una barra rovesciata: "\ /".
/ ^ [A-z0-9 _-] 3,16 $ /
Iniziamo dicendo al parser di trovare l'inizio della stringa (^), seguito da qualsiasi lettera minuscola (a-z), numero (0-9), trattino basso o trattino. Successivamente, 3,16 si assicura che siano almeno 3 di quei caratteri, ma non più di 16. Infine, vogliamo la fine della stringa ($).
my-us3r_n4m3
th1s1s-wayt00_l0ngt0beausername (troppo lungo)
/ ^ [A-z0-9 _-] 6,18 $ /
La corrispondenza di una password è molto simile alla corrispondenza di un nome utente. L'unica differenza è che anziché da 3 a 16 lettere, numeri, trattini bassi o trattini, ne vogliamo da 6 a 18 (6,18).
myp4ssw0rd
mypa $$ w0rd (contiene un segno di dollaro)
? / ^ # ([A-F0-9] 6 | [a-F0-9] 3) $ /
Iniziamo dicendo al parser di trovare l'inizio della stringa (^). Successivamente, un segno di numero è facoltativo perché è seguito un punto interrogativo. Il punto interrogativo indica al parser che il carattere precedente - in questo caso un segno di numero - è facoltativo, ma deve essere "avido" e catturarlo se è lì. Successivamente, all'interno del primo gruppo (primo gruppo di parentesi), possiamo avere due diverse situazioni. Il primo è una lettera minuscola tra ae f o un numero sei volte. La barra verticale ci dice che possiamo anche avere tre lettere minuscole tra a ef o numeri. Infine, vogliamo la fine della stringa ($).
La ragione per cui ho messo prima il sei carattere è che il parser catturerà un valore esadecimale come #ffffff. Se l'avessi invertito in modo che i tre personaggi venissero per primi, il parser avrebbe raccolto solo #fff e non gli altri tre f.
# a3c113
# 4d82h4 (contiene la lettera h)
/ ^ [A-z0-9 -] + $ /
Utilizzerai questa espressione regolare se dovessi mai lavorare con mod_rewrite e pretty URL. Iniziamo dicendo al parser di trovare l'inizio della stringa (^), seguito da uno o più (il segno più) lettere, numeri o trattini. Infine, vogliamo la fine della stringa ($).
my-titolo-qui
my_title_here (contiene underscore)
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]2,6)$/
Iniziamo dicendo al parser di trovare l'inizio della stringa (^). All'interno del primo gruppo, abbiniamo una o più lettere minuscole, numeri, caratteri di sottolineatura, punti o trattini. Sono sfuggito al punto perché un punto senza escape indica qualsiasi carattere. Subito dopo, ci deve essere un cartello. Il prossimo è il nome del dominio che deve essere: una o più lettere minuscole, numeri, trattini bassi, punti o trattini. Quindi un altro punto (con escape), con l'estensione da due a sei lettere o punti. Ho da 2 a 6 a causa del TLD specifico per paese (.ny.us o .co.uk). Infine, vogliamo la fine della stringa ($).
[email protected] (TLD è troppo lungo)
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]2,6)([\/\w \ .-] *) * \ /? $ /
Questa regex è quasi come prendere la parte finale della regex di cui sopra, schiaffandola tra "http: //" e una struttura di file alla fine. Sembra molto più semplice di quanto sia in realtà. Per iniziare, cerchiamo l'inizio della linea con il segno di omissione.
Il primo gruppo di cattura è tutto opzionale. Consente all'URL di iniziare con "http: //", "https: //" o nessuno dei due. Ho un punto interrogativo dopo la s per consentire agli URL che hanno http o https. Per rendere tutto questo gruppo facoltativo, ho appena aggiunto un punto interrogativo alla fine di esso.
Il prossimo è il nome di dominio: uno o più numeri, lettere, punti o hypens seguiti da un altro punto quindi da due a sei lettere o punti. La seguente sezione sono i file e le directory opzionali. All'interno del gruppo, vogliamo abbinare qualsiasi numero di barre, lettere, numeri, trattini bassi, spazi, punti o trattini. Quindi diciamo che questo gruppo può essere abbinato tutte le volte che vogliamo. Praticamente questo consente di associare più directory e un file alla fine. Ho usato la stella invece del punto interrogativo perché la stella dice zero o più, non zero o uno. Se dovesse essere usato un punto interrogativo, solo un file / directory potrebbe essere abbinato.
Quindi viene abbinata una barra finale, ma può essere facoltativa. Finalmente finiamo con la fine della linea.
http://net.tutsplus.com/about
http://google.com/some/file!.html (contiene un punto esclamativo)
/ ^ (? :( ?: 25 [0-5] | 2 [0-4] [0-9] |?? [01] [0-9] [0-9]). \) 3 ( ?:?? 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]) $ /
Ora, non ho intenzione di mentire, non ho scritto questo regex; L'ho preso da qui. Ora, questo non significa che non riesco a distinguere il personaggio per il personaggio.
Il primo gruppo di acquisizione in realtà non è un gruppo catturato perché
?:
è stato collocato all'interno del quale dice al parser di non catturare questo gruppo (più su questo nell'ultima espressione regolare). Vogliamo anche che questo gruppo non catturato venga ripetuto tre volte: il 3 alla fine del gruppo. Questo gruppo contiene un altro gruppo, un sottogruppo e un punto letterale. Il parser cerca una corrispondenza nel sottogruppo, quindi un punto da spostare.
Il sottogruppo è anche un altro gruppo non di cattura. Sono solo un gruppo di set di caratteri (le cose racchiuse tra parentesi): la stringa "25" seguita da un numero compreso tra 0 e 5; o la stringa "2" e un numero compreso tra 0 e 4 e qualsiasi numero; o uno zero opzionale o uno seguito da due numeri, con il secondo opzionale.
Dopo aver abbinato tre di questi, è sul prossimo gruppo non catturante. Questo vuole: la stringa "25" seguita da un numero compreso tra 0 e 5; o la stringa "2" con un numero compreso tra 0 e 4 e un altro numero alla fine; o uno zero opzionale o uno seguito da due numeri, con il secondo opzionale.
Terminiamo questa regex confusionaria con la fine della stringa.
73.60.124.136 (no, non è il mio indirizzo IP: P)
256.60.124.136 (il primo gruppo deve essere "25" e un numero compreso tra zero e cinque)
/ ^<([a-z]+)([^<]+)*(?:>(. *)<\/\1>| \ S + \ />) $ /
Una delle regex più utili nell'elenco. Corrisponde a qualsiasi tag HTML con il contenuto all'interno. Come al solito, iniziamo con l'inizio della linea.
Prima viene il nome del tag. Deve essere una o più lettere lunghe. Questo è il primo gruppo di cattura, è utile quando dobbiamo afferrare il tag di chiusura. La prossima cosa sono gli attributi del tag. Questo è un qualsiasi carattere ma un segno maggiore di (>). Dato che questo è opzionale, ma voglio abbinare più di un personaggio, viene usata la stella. Il segno più costituisce l'attributo e il valore e la stella dice quanti attributi vuoi.
Poi arriva il terzo gruppo non di cattura. All'interno, conterrà un segno più grande, alcuni contenuti e un tag di chiusura; o alcuni spazi, una barra in avanti e un segno maggiore. La prima opzione cerca un segno più grande seguito da un numero qualsiasi di caratteri e il tag di chiusura. \ 1 viene utilizzato che rappresenta il contenuto catturato nel primo gruppo di acquisizione. In questo caso era il nome del tag. Ora, se non è possibile trovare una corrispondenza, vogliamo cercare un tag che si chiude automaticamente (come un tag img, br o hr). Questo deve avere uno o più spazi seguiti da "/>".
L'espressione regolare è terminata con la fine della riga.
Nettuts ">"> http://net.tutsplus.com/ Nettuts+
(gli attributi non possono contenere più di segni)
Spero che tu abbia colto un po 'meglio le idee alla base delle espressioni regolari. Spero che userete queste regex nei progetti futuri! Molte volte non avrai bisogno di decifrare un carattere regex per carattere, ma a volte se lo fai ti aiuta a imparare. Ricorda, non aver paura delle espressioni regolari, potrebbe non sembrare, ma ti rendono la vita molto più facile. Prova a estrarre il nome di un tag da una stringa senza espressioni regolari!
Seguici su Twitter o iscriviti al feed RSS di NETTUTS per ulteriori tuts e articoli di sviluppo web giornalieri. E controlla alcune di queste app regex su Envato Market.