8 espressioni regolari che dovresti sapere

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:

Estrattore RegEx

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.

Esempi di utilizzo

  • Estrai email da una vecchia rubrica CSV.
  • Estrai sorgenti di immagini da file HTML.
  • Estrarre i proxy dai siti Web online.
  • Estrai i risultati degli URL da Google.

PHP Regular Expression Tester

  1. Tester regex veloce
  2. Basata su AJAX
  3. jQuery ecc non sono richiesti.
  4. Nessun database richiesto
  5. Pubblicità pronta

MyRegExp

Questo elemento è un builder PHP RegEx, che ti aiuta a costruire espressioni regolari in una sintassi PHP estensibile. Puoi:

  1. Costruisci le espressioni regolari con una semplice sintassi PHP
  2. Convalidare le stringhe con RegEx creato
  3. Crea le RegEx e prendile
  4. Applicare preg_match a un RegEx
  5. Sostituisci una stringa con RegEx creato

Tutto ciò in una sintassi PHP. Niente più teste rotte che cercano di fare RegEx di base o complesso!


Informazioni di base sulle espressioni regolari

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: "\ /".


1. Abbinamento di un nome utente

Modello:

/ ^ [A-z0-9 _-] 3,16 $ /

Descrizione:

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 ($).

Stringa che corrisponde a:

my-us3r_n4m3

Stringa che non corrisponde:

th1s1s-wayt00_l0ngt0beausername (troppo lungo)


2. Abbinamento di una password

Modello:

/ ^ [A-z0-9 _-] 6,18 $ /

Descrizione:

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).

Stringa che corrisponde a:

myp4ssw0rd

Stringa che non corrisponde:

mypa $$ w0rd (contiene un segno di dollaro)


3. Corrispondenza con un valore esadecimale

Modello:

? / ^ # ([A-F0-9] 6 | [a-F0-9] 3) $ /

Descrizione:

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.

Stringa che corrisponde a:

# a3c113

Stringa che non corrisponde:

# 4d82h4 (contiene la lettera h)


4. Abbinamento a una lumaca

Modello:

/ ^ [A-z0-9 -] + $ /

Descrizione:

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 ($).

Stringa che corrisponde a:

my-titolo-qui

Stringa che non corrisponde:

my_title_here (contiene underscore)


5. Abbinamento a un'e-mail

Modello:

/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]2,6)$/

Descrizione:

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 ($).

Stringa che corrisponde a:

[email protected]

Stringa che non corrisponde:

[email protected] (TLD è troppo lungo)


6. Abbinamento di un URL

Modello:

/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]2,6)([\/\w \ .-] *) * \ /? $ /

Descrizione:

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.

Stringa che corrisponde a:

http://net.tutsplus.com/about

Stringa che non corrisponde:

http://google.com/some/file!.html (contiene un punto esclamativo)


7. Abbinamento ad un indirizzo IP

Modello:

/ ^ (? :( ?: 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]) $ /

Descrizione:

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.

Stringa che corrisponde a:

73.60.124.136 (no, non è il mio indirizzo IP: P)

Stringa che non corrisponde:

256.60.124.136 (il primo gruppo deve essere "25" e un numero compreso tra zero e cinque)


8. Corrispondenza con un tag HTML

Modello:

/ ^<([a-z]+)([^<]+)*(?:>(. *)<\/\1>| \ S + \ />) $ /

Descrizione:

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.

Stringa che corrisponde a:

Nettuts ">"> http://net.tutsplus.com/ Nettuts+

Stringa che non corrisponde:

My image> (gli attributi non possono contenere più di segni)


Conclusione

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.