Sei sulla pagina 1di 14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

Iscriviti via RSS

HOME

CONTATTI

Guida alla sintassi delle espressioni regolari (con esempi)


GEN /10

Tag

apache backup batch beep


conversioni

css data directory errori

espressioni regolari files firefox firewall

html ie6 iframe ISO-8859-1

javascript jQuery

linux
da un po' di tempo che meditavo la creazione di una guida alle espressioni regolari: in giro per la rete ce ne sono a bizzeffe, ma poche complete e pochissime quelle in italiano; inoltre scrivere una guida da la possibilit di ampliare le proprie conoscenze! Infatti scrivendola ho imparato cose di cui ignoravo l'esistenza! Bisogna dire che molti preferiscono copiare ed incollare righe su righe di incomprensibili caratteri piuttosto che imparare questa strana sintassi, poich a prima vista questa appare criptica ed incomprensibile e le espressioni sono solo lunghe serie di caratteri messi a casaccio senza un nesso logico! Ma vedrete che non c' nulla di difficile: basta un po' di elasticit mentale, un pizzico di memoria e soprattutto un buon manuale da consultare spesso Cercher di utilizzare una linearit nella descrizione, anche se questo mi risulter difficile poich complicato spiegare un singolo elemento senza utilizzarne altri.

localizzazione mysql

permessi php rtf search/replace shorewall tar ttf usb utf-8 validazione

validazione email

workaround xhtml
Commenti Recenti Marco su Come eseguire uno script alluscita della pagina Elisabetta su Come eseguire uno script alluscita della pagina fabioamd87 su Abilitare/Disabilitare il System Beep in Linux (Debian, Ubuntu) Articoli recenti Immagine di loading senza immagine: spin.js Come aggiornare la cache del browser Periferica USB non riconosciuta Soluzioni banali Area admin di wordpress lenta? Problema risolto! Guida alla sintassi delle espressioni regolari (con esempi)

A che cosa servono le espressioni regolari?


Le espressioni regolari sono molto utili nell'ambito della ricerca e della sostituzione. Immaginiamo di avere un testo storico enorme e di dover convertire tutte le date in formato americano (yyyy/mm/dd) in quello classico italiano... Sarebbe un lavoraccio dover fare tutto il lavoro a mano! E probabilmente ci sfuggirebbero degli errori! Ecco, con le espressioni regolari possibile farlo in pochi caratteri! Con un risparmio di tempo, di errori e di fegato

La sintassi: Uguale per tutti i programmi / linguaggi?


Solitamente si, in javascript e in perl la sintassi simile, preg_replace di php utilizza la sintassi di perl, mentre ereg... beh, ereg ormai deprecato. Anche Ide e programmi di testo come vim, notepad++, Komodo edit, Dreamweaver, etc. supportano il search&replace con le espressioni regolari. Diciamo che la sintassi potrebbe cambiare, ma non di molto. E comunque se imparate quella di perl potrete comunque cavarvela con qualsiasi altra variante Ma passiamo alla descrizione dettagliata di ogni singolo elemento:
i quantificatori; i quantificatori "non golosi"; le classi di caratteri e i POSIX; i modificatori; le ancore; i caratteri speciali; gli intervalli; i gruppi; i metacaratteri; le asserzioni;

I metacaratteri
Nelle espressioni regolari esistono diversi "caratteri speciali" dalle diverse funzioni
META . DESCRIZIONE significa qualsiasi carattere ad eccezione di quelli che identificano una riga nuova (\n e \r per intenderci) Vedi esempio ^ identifica l'inizio di una riga; inoltre all'inizio di un gruppo nega il gruppo stesso Vedi esempio

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

1/14

29/4/2014
$ identifica la fine di una riga Vedi esempio | una condizione OR Vedi esempio () [] \

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

le parentesi tonde identificano dei gruppi di caratteri le parentesi quadre identificano intervalli e classi di caratteri questo carattere annulla gli effetti del metacarattere successivo Vedi esempio

I quantificatori
I quantificatori, come dice il termine stesso, indicano quante volte ricercare una data sequenza di caratteri.
CLASSI * DESCRIZIONE indica 0 o pi occorrenze Vedi esempio + indica 1 o pi occorrenze Vedi esempio ? indica 1 o 0 occorrenze Vedi esempio {N} ricerca esattamente n occorrenze; da ricordare che le parentesi grafe vengono considerate caratteri normali in tutti gli altri contesti Vedi esempio {N,} ricerca minimo n occorrenze; vedi sopra Vedi esempio {N,M} ricerca minimo n occorrenze ma non superiori alle m; vedi sopra Vedi esempio

I quantificatori "non golosi" (ungreedy)


Quasi tutti inciampano prima o poi in questo problema: se utilizzo una espressione del tipo /".*"/ trover tutte le parole racchiuse tra doppi apici? Purtroppo no! Questo perch i quantificatori normali sono "golosi" (in inglese greedy ), cio cercano l'occorrenza il pi grande possibile. Vediamo con un esempio:
1 2 3 4 $ t e s t o=' c l a s s = " p l u t o "i d = " p i p p o " ' ; p r e g _ m a t c h _ a l l ( ' / " . * " / ' ,$ t e s t o ,$ r i s ) ; / /T r o v e r u n ' u n i c ao c c o r r e n z a : / /" p l u t o "i d = " p i p p o "

Come vedete non il risultato sperato! Come fare quindi? Basta aggiungere un punto interrogativo alla fine dei nostri quantificatori
1 $ t e s t o=' c l a s s = " p l u t o "i d = " p i p p o " ' ; 2 p r e g _ m a t c h _ a l l ( ' / " . * ? " / ' ,$ t e s t o ,$ r i s ) ; 3 / /O r at r o v e r " p l u t o "e" p i p p o "!

Questo vale per qualsiasi quantificatore descritto in precedenza!

Le classi e gli intervalli


Le classi determinano un elenco di caratteri, di classi di caratteri o di POSIX (vedi la sezione successiva) da ricercare. Vengono racchiusi tra parentesi quadre e possono essere seguiti dai quantificatori.
1 2 3 4 $ t e s t o=' Q u e s t au n as t r i n g al u n g al u n g ad ie s e m p i o ' ; p r e g _ m a t c h _ a l l ( ' / [ a i u o e ] { 2 } / ' ,$ t e s t o ,$ r i s ) ; / /L ' e s p r e s s i o n er i c e r c h e r d u ev o c a l ic o n s e c u t i v e , / /q u i n d it r o v e r " u e "e" i o "

Per identificare un intervallo invece si utilizza il segno meno ( - ). Per esempio a-z identificher tutti i caratteri http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

2/14

29/4/2014 Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it Per identificare un intervallo invece si utilizza il segno meno ( - ). Per esempio a-z identificher tutti i caratteri minuscoli dalla a alla z, F-R i caratteri maiuscoli dalla F alla R, 0-5 i numeri da 0 a 5 e cos via.
1 2 3 4 $ t e s t o=' c a r a t t e r i1 6 s d f 4 5 6eu nc o l o r ee s a d e c i m a l e9 4 f a 3 c' ; p r e g _ m a t c h _ a l l ( ' / [ 0 9 a f ] { 6 } / ' ,$ t e s t o ,$ r i s ) ; / /L ' e s p r e s s i o n er i c e r c h e r 6c a r a t t e r ic h es i a n on u m e r iol e t t e r ed a l l aaa l l af / /q u i n d it r o v e r " 9 4 f a 3 c "

Il carattere ^, che se posto subito dopo la parentesi quadra aperta nega tutto l'intervallo, cio indica di non ricercare i caratteri inclusi.
1 2 3 4 $ t e s t o=' Q u e s t au n as t r i n g al u n g al u n g ad ie s e m p i o ' ; p r e g _ m a t c h _ a l l ( ' / [ ^ a i u o e] { 3 } / ' ,$ t e s t o ,$ r i s ) ; / /L ' e s p r e s s i o n er i c e r c h e r 3l e t t e r ec h en o ns i a n ov o c a l ios p a z i / /q u i n d it r o v e r s o l a m e n e" s t r "

Le classi di caratteri e i POSIX


Le classi di caratteri e i POSIX servono per specificare una serie di caratteri allo stesso tempo, senza dover scomodare i gruppi. Da ricordarsi che i POSIX in php devono essere racchiusi da una doppia parentesi quadra.
CLASSI \W [:WORD:] CORRISPONDE A [a-zA-Z0-9_] DESCRIZIONE ricerca un carattere "parola" (w sta per word), cio lettere, numeri e "_" Vedi esempio \W [a-zA-Z0-9_] ricerca un carattere che non sia \w, cio tutto quello che non lettere, numeri o "_" Vedi esempio \D [:DIGIT:] [0-9] ricerca un numero (d sta per digit) Vedi esempio \D [^0-9] l'opposto di \d, ricerca qualsiasi cosa che non sia un numero Vedi esempio \S [:SPACE:] [ \t\r\n\v\f] ricerca uno spazio, comprese tabulazioni e caratteri di fine riga Vedi esempio \S [^ \t\r\n\v\f] l'inverso di \s, ricerca qualsiasi cosa che non sia uno spazio, una tabulazione o dei caratteri di fine riga Vedi esempio [:ALNUM:] [a-zA-Z0-9] Ricerca caratteri alfanumerici, senza "_" Vedi esempio [:ALPHA:] [a-zA-Z] Ricerca caratteri alfabetici Vedi esempio [:BLANK:] [ \t] ricerca solo spazi e tabulazioni Vedi esempio [:LOWER:] [a-z] ricerca lettere minuscole Vedi esempio [:UPPER:] [A-Z] ricerca lettere maiuscole Vedi esempio [:GRAPH:] [\x21-x7E] ricerca tutti i caratteri visibili a video della tabella ascii non estesa, dal numero 33 (!) al 126 (~). Vedi esempio [:PRINT:] [\x20-x7E] ricerca tutti i caratteri visibili a video della tabella ascii non estesa, dal numero 32 (spazio) al 126 (~). Vedi esempio [:PUNCT:] ricerca tutti i caratteri di punteggiatura come -!"#$%&'()*+,.\/:;<=>?@[]^_`{|}~ Vedi esempio [:CNTRL:] [\x00-x1F\x7F] ricerca solo i caratteri di controllo

I modificatori
http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html 3/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

Ogni operazione di ricerca pu utilizzare vari modificatori, che, come dice il nome stesso, possono modificare i criteri di ricerca predefiniti. Questi modificatori devono essere posizionati alla fine della stringa di ricerca, subito dopo il carattere di limitazione. possibile combinare pi effetti accodando senza spazi i modificatori (per esempio: /imsu applicher tutti e 4 gli effetti sotto descritti).
MOD. I DESCRIZIONE la ricerca diventa case-insensitive, cio maiuscole e minuscole vengono considerate uguali Vedi esempio M le ricerca verr considerate "per riga", cio le ancore tipo "^" e "$" verranno applicate per ogni riga di testo Vedi esempio S il testo viene considerato un'unica riga e "." ora identifica anche i caratteri di fine riga, che normalmente non troverebbe Vedi esempio U vengono abilitati i caratteri Unicode estes, come \x{10FFFFF} Vedi esempio U attiva l'opzione ungreedya tutti i quantificatori Vedi esempio

Le ancore
Le ancore identificano la posizione in cui ricercare il nostro testo.
ANCORA ^ DESCRIZIONE identifica l'inizio della stringa; con il modificatore /m identifica l'inizio di ogni riga Vedi esempio $ identifica la fine della stringa; con il modificatore /m identifica la fine di ogni riga Vedi esempio \A similmente a ^, identifica solo l'inizio della stringa, anche se presente il modificatore /m Vedi esempio \Z similmente a $, identifica solo la fine della stringa, anche se presente il modificatore /m Vedi esempio \B indentifica il punto tra due caratteri che siano \w a sinistra e non \w a destra Vedi esempio \B identifica l'opposto di \b Vedi esempio

I caratteri speciali
Chi ha un po' di conoscenza di php o di perl avr gi avuto a che fare con quei segnaposto che identificano dei caratteri speciali, come quelli di fine riga o le tabulazioni. Tali segnaposto iniziano tutti con il carattere \ Ecco un elenco molto pi che dettagliato, da sottolineare l'importanza di \Q!!!
SEGNAPOSTO \T \N \R \Q CARATTERE CORRISPONDENTE tabulazione (HT, TAB) fine riga (LF, NL) ritorno a capo (CR) disabilita qualsiasi metacarattere presente fino a \E molto utile per inserire delle variabili nella stringa Vedi esempio

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

4/14

29/4/2014
\E \NNN \XNN \F \A \E vedi sopra

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

carattere in forma ottale dove n un numero da 0 a 7 carattere in forma esadecimale dove n un numero... esadecimale form feed (FF) alarm/bell (BEL) escape (BEL)

I gruppi
I gruppi vengono racchiusi dalle parentesi tonde e diventano essenziali nel momento della sostituzione, poich possibile richiamarli. Un esempio per chiarire tutto:
1 $ t e s t o=" Q u e s t ou n ad a t af o r m a t om y s q l :2 0 1 0 0 1 2 8 " ; 2 $ t e s t o=p r e g _ r e p l a c e ( ' / ( \ d { 4 } ) ( \ d { 2 } ) ( \ d { 2 } ) / ' ,' Q u e s t au n ad a t ai nf o r m a t oe u r o p e o :$ 3 / $ 2 / $ 1 ' ,$ t e s t o ) ; 3 / /o r a$ t e s t os a r " Q u e s t au n ad a t ai nf o r m a t oe u r o p e o :2 8 / 0 1 / 2 0 1 0 "

Come vedete l'espressione contiene tre gruppi e nella sostituzione compaiono dei dollari seguiti da un numero: questo numero rappresenta il testo trovato dal gruppo corrispondente. Cos $1 identificher il primo gruppo, $2 il secondo e cos via. Per essere fiscali possibile utilizzare \1 e \2 invece che $1 e $2, ma ve lo sconsiglio in quanto le barre dentro una stringa devono essere precedute da un'altra barra e questo rende tutto meno leggibile
1 $ t e s t o=" Q u e s t ou n ad a t af o r m a t om y s q l :2 0 1 0 0 1 2 8 " ; 2 $ t e s t o=p r e g _ r e p l a c e ( ' / ( \ d { 4 } ) ( \ d { 2 } ) ( \ d { 2 } ) / ' ,' Q u e s t au n ad a t ai nf o r m a t oe u r o p e o :\ \ 3 / \ \ 2 / \ \ 1 ' , $ t e s t o ) ; 3 / /o r a$ t e s t os a r " Q u e s t au n ad a t ai nf o r m a t oe u r o p e o :2 8 / 0 1 / 2 0 1 0 "

Nei gruppi inoltre possibile aggiungere un'espressione logica "OR", cio poter ricercare una serie di caratteri oppure un'altra
1 2 3 4 $ t e s t o=" S id i c eh ap i o v u t oop i o v u t oi ni t a l i a n o ? " ; $ t e s t o=p r e g _ r e p l a c e ( ' / \ s + ( ( h a | ) \ s + p i o v u t o ) \ s + / ' ,'n e v i c a t o' ,$ t e s t o ) ; / /L ' e s p r e s s i o n ec e r c h e r " h ap i o v u t o "o p p u r e" p i o v u t o "s e g u i t iop r e c e d u t id as p a z i ; / /$ t e s t oo r as a r " S id i c en e v i c a t oon e v i c a t oi ni t a l i a n o ? "

Questa funzione ritorner sia "ha piovuto" che " piovuto". Ma fate attenzione , poich anche in questo caso le parentesi tonde rappresentano un gruppo e quindi verr considerato nelle variabili di sostituzione, in questo caso $1 conterr "ha piovuto" o " piovuto" e $2 "ha" o "". Qui non sempra un problema, ma nelle espressioni pi complesse ricercare cose non necessarie complica orrendamente le cose. Come fare allora? Basta utilizzare i gruppi passivi, aggiungendo un "?:" subito dopo la parentesi tonda aperta:
1 2 3 4 $ t e s t o=" S id i c eh ap i o v u t oop i o v u t oi ni t a l i a n o ? " ; $ t e s t o=p r e g _ r e p l a c e ( ' / \ s + ( ( ? : h a | ) \ s + p i o v u t o ) \ s + / ' ,'n e v i c a t o' ,$ t e s t o ) ; / /L ' e s p r e s s i o n ec e r c h e r " h ap i o v u t o "o p p u r e" p i o v u t o "s e g u i t iop r e c e d u t id as p a z i ; / /$ t e s t oo r as a r " S id i c en e v i c a t oon e v i c a t oi ni t a l i a n o ? "

Se analizzate il risultato ora conterr solamente "ha piovuto" e " piovuto"

Le asserzioni
Ho lasciato appositamente per ultime le asserzioni, visto che la maggior parte delle persone ha molta difficolt ad assimilarle. Per una volta imparate le userete spesso e volentieri! Esponiamo un problema: possibile ricercare solo quelle parole che iniziano con la lettera "c" ma che la seconda lettera non sia una vocale? Certo, basta utilizzare le asserzioni! In pratica sono degli elementi di controllo che vengono applicati alle nostre ricerche. Inoltre tutte le asserzioni sono passive, cio, come spiegato prima, non vengono aggiunte fra le variabili di ricerca. un po' complicato da spiegare, ma vedrete che con gli esempi qui sotto tutto risulter pi chiaro!
ASSERZIONE (?=PATTERN) DESCRIZIONE asserzione lookahead positiva, cio valida l'espressione precedente solo se la condizione pattern verificata. Vedi esempio (?!PATTERN) asserzione lookahead negativa, cio valida l'espressione precedente solo se la condizione patternnon verificata. Vedi esempio (?<=PATTERN) asserzione lookbehind positiva, cio valida l'espressione successiva solo se la condizione pattern verificata.

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

5/14

29/4/2014
Vedi esempio (?<!PATTERN)

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

asserzione lookbehind negativa, cio valida l'espressione successiva solo se la condizione patternnon verificata. Vedi esempio

(?>PATTERN)

sottoespressione indipendente, cio l'espressione viene considerata singolarmente senza considerare altre cose. Vedi esempio

Conclusioni
Bene, ora avete una infarinatura sulle espressioni regolari! In futuro aggiorner questa guida aggiungendo esempi e nuove descrizioni, quindi vi consiglio di aggiungerla ai preferiti! Ovviamente se avete cose da aggiungere potete farlo nei commenti!
Be Sociable, Share!

Tw eet

Like

14

Share

StumbleUpon
Lascia un commento

Tag: espressioni regolari

Commenti (43)

Trackback (0)

iscriviti ai commenti di questo post

Eric
gennaio 29th, 2010 - 01:50

Bella questa guida! E gi nei preferiti!

silvio
aprile 12th, 2010 - 16:35

Salve ho un piccolo problema di lavoro ma sulla shell sono alle prome armi e avrei bisogno di un suggerimento in linux come faccio a verificare se un dato file contiene solo numeri ?? sarei molto grato grazie.

chalda
aprile 12th, 2010 - 19:51

Ciao Silvio! Per la ricerca di file di soli numeri devi utilizzare il comando find:
1 f i n d.r e g e x" . * / [ 0 9 ] + "

silvio
aprile 12th, 2010 - 20:15

grazie mi chiedevo : questa sintassi mi restituisce i file con il nome in forma numerica o con il contenuto ? sarebbe tipo :
1 l i s t a = $ ( l s1p i p p o f i l e * ) 2 f o ri n d e xi n$ l i s t a 3 d o 4 f i n d. r e g e x " . * / [ 0 9 ] + "$ i n d e x 5 s t a t o = $ ? 6 d o n e

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

6/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

e cosi? come controllo il singolo file ?? grazie tante

chalda
aprile 13th, 2010 - 01:22

Beh, potresti invece fare una cosa del genere:


1 l i s t a = $ ( f i n d/ c a r t e l l a /r e g e x" . * / p i p p o f i l e [ 0 9 ] + ") 2 f o ri n d e xi n$ l i s t a 3 d o 4 e c h o$ i n d e x 5 d o n e

In $lista avresti tutti i file contenenti numeri presenti nella cartella

silvio
aprile 13th, 2010 - 08:51

la provo subito grazie tante Chalda

Valerio
agosto 13th, 2010 - 11:30

Ottima guida: semplice, completa, schematica e sinottica, piena di esempi chiari e facili. Peccato per un piccola svista proprio nella parte iniziale, nellesempio sulluso del meta-carattere $, che rischia di disorientare i pi inesperti (i cosiddetti neofiti). La versione corretta dellesempio ovviamente: preg_match_all(/.$/, $testo, $ris); Questo quello che ho trovato a colpo docchio, ad una prima scorsa veloce. Non escludo quindi la presenza di altri errori (magari pi importanti), ma ho ritenuto di segnalartelo subito, a causa dellimpatto psicologico negativo che ha avuto su me stesso (anche se poi leggendo il seguito mi sono ricreduto). Vale quindi la pena di correggerlo al pi presto! Naturalmente, se avr tempo e voglia di analizzare a fondo tutto il documento, non mancher di inviarti miei eventuali commenti ulteriori. Personalmente ho gi una buona esperienza sullargomento e non mi mancano certo guide e tutorial, tutti in inglese, ed anche ottima guida tascabile in italiano, trovata per caso in libreria un mese fa a pochi euro (se ti interessa ti far sapere i dettagli), che ancora devo leggere (spiega anche le differenze fra Perl, PHP, JavaScript, etc., con esempi). Mi sono imbattuto nel tuo sito perch stavo cercando una guida semplice e valida in italiano per un amico (possibilmente gratuita), e credo francamente di averla trovata proprio qui. Complimenti e buon proseguimento. Valerio.

chalda
agosto 13th, 2010 - 21:05

Grazie della segnalazione, ho corretto lerrore di copiaincollatura In inglese ci sono molte guide pi complete, io di solito mi baso su http://www.regular-expressions.info/ , per parla in modo alquanto complesso per uno che si deve avvicinare alle espressioni regolari. Grazie dei complimenti e lieto di esserti stato daiuto

Ale
ottobre 28th, 2010 - 03:11

1 2 3 4

$testo = Questa una stringa lunga lunga di esempio; preg_match_all(/[aiuoe]{2}/, $testo, $ris); // Lespressione ricercher due vocali consecutive, // quindi trover ue e un

correzione: quindi trover ue e io

Ale
ottobre 28th, 2010 - 03:13

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

7/14

29/4/2014

ottobre 28th, 2010 - 03:13

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

Comunque grazie a questa guida sto imparando questo argomento, veramente un casino impararli, in internet tutto in inglese e le poche guide in italiano che ci sono partono subito in quarta e non si capisce niente. Li sto imparando meglio qui che nel librone da 900 pagine che ho!

chalda
ottobre 28th, 2010 - 06:37

Grazie della segnalazione e dei complimenti, sono contento di esserti stato utile!

ciro83
novembre 1st, 2010 - 11:34

Ciao a tutti, devo costruire unespressione regolare che mi trova delle stringe racchiuse tra parentesi graffe, al fine di eliminarle. Per esempio: la mia stringa iniziale : [code]Testo bla bla bla {pippo} 2 bla bla bla {topolino} ciao ciao[code]; quella finale deve diventare [code]Testo bla bla bla 2 bla bla bla ciao ciao[code]; Qual l'esatta espressione regolare da utilizzare nella funzione eregi_replace?

chalda
novembre 2nd, 2010 - 08:12

Allora ti sconsiglio di utilizzare eregi, in quanto deprecato ( http://php.net/manual/en/function.ereg.php ), meglio usare preg_replace! Puoi comunque utilizzare la seguente espressione:
1 $ s t r i n g a=p r e g _ r e p l a c e ( ' / { ( . * ? ) } / ' ,' ' ,$ s t r i n g a ) ; 2 / /c o ne r e g _ r e p l a c e :( d e p r e c a t oel e n t o ) : 3 $ s t r i n g a=e r e g _ r e p l a c e ( ' { [ ^ } ] * } ' , ' ' , $ s t r i n g a ) ;

Ereg non supporta gli ungreedy, quindi la sintassi un attimo diversa. Comunque ti rinnovo il suggerimento di dimenticare ereg per passare a preg

Luca Bartoli
dicembre 16th, 2010 - 11:55

Bravissimo, guide cos se ne trovano davvero poche in giro! Ti segnalo un errore di copiatura nellasserzione lookbehind negativa. Hai copiato
1 p r e g _ m a t c h _ a l l ( ' / ( \ w + ( ? < ! a ) s t o ) / ' ,$ t e s t o ,$ r i s ) ;

Mentre dovrebbe essere


1 p r e g _ m a t c h _ a l l ( ' / ( \ w + ( ? < ! a ) s t o ) / ' ,$ t e s t o ,$ r i s ) ;

Ancora complimenti, Luca Bartoli

Alessio
febbraio 23rd, 2011 - 19:02

Io mi sono letto tutta la guida ma c una cosa che non riesco proprio a fare Mettiamo il caso di questo esempio Io ho una stringa lunghissima dove ci sono molte parole tipo details Vorrei che il preg_match trovasse tutto il testo che sta tra ogni details e il pi vicino punto . Esempio $stringa = ciao a tutti details e in ogni ciao a tutti. perch ciao details che ciao io devo fare. il modo che details sempre.; Dovrei estrapolare delle variabili che siano $var1 = e in ogni ciao a tutti;
http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html 8/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

$var2 = che ciao io devare; $var3 = sempre; Mi sto dannando con questo preg_match e non riesco proprio a cavarne piede Ringrazio tantissimo a chi mi d una mano in questo! Ciao grazie!

chalda
febbraio 28th, 2011 - 15:33

Ciao Alessio, La cosa semplice:


1 $ s t r i n g a=' c i a oat u t t id e t a i l sei no g n ic i a oat u t t i .p e r c h c i a od e t a i l sc h ec i a oi od e v of a r e .i lm o d o c h ed e t a i l ss e m p r e . ' ; 2 p r e g _ m a t c h ( ' / d e t a i l s ( . * ? ) \ . / ' ,$ s t r i n g a ,$ s u b ) ; 3 p r i n t _ r ( $ s u b ) ;

In pratica ricerchi tutto quello che c tra details ed un punto. Fai attenzione al ? (che identifica la ricerca ungreedy) e lescape (\) prima del punto

bruno
marzo 3rd, 2011 - 10:20

ciao innanzitutto complimenti per la guida avrei una domanda: mettiamo che abbia la stringa: $stringa =questa stringa contiene un ritorno a capo. come dovrei scrivere lespressione regolare che mi dia true confrontandola con la stringa

bruno
marzo 3rd, 2011 - 10:37

ti ringrazio comunque ma ho gi risolto io scrivevo lespressione correttamente ma misteriosamente non funzionava forse qualche virgola fuoriposto ancora complimenti per la guida!

Fabio
settembre 15th, 2011 - 08:22

ciao, complimenti per la guida, tuttavia non ho ben capito come fare per le lettere accentate. devo controllare un nome, quindi voglio accettare lettere, lettere accentate, apostrofi e spazio. ho provato in questa maniera, utilizzando i codici ASCII, ma non funziona: preg_match_all(/[\x27x41-x5Ax60-x7Ax80-x9AxA0-xA5xB5-xB7xD2-xD4xD6xE0-xE5xE9-xEBxEF ]/, $nome,$out). hai qualche idea? grazie mille

Claudio
ottobre 13th, 2011 - 10:25

Complimenti per la guida mi stata molto utile. Posso porti un quesito? Ho un problema che mi sta facendo impazzire ma sono certo che mi sto perdendo in un bicchiere dacqua.

Paolo
ottobre 16th, 2011 - 18:05

Ciao, complimenti per la guida.


http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html 9/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

Vorrei farti una domanda: possibile utilizzare le espressioni regolari per rimpicciolire o ingrandire una immagine senza ricorrere alle librerie GD? Se s, come? In dettaglio: con una query a mysql recupero dei valori che sono testo e immagine con tutti i tag del caso. Limmagine nel tag html ha i width e lheight valori predeterminati. Una volta che recupero il testo e limmagine vorrei che questultima assuma dei valori width e lheight diversi.

Alex
novembre 1st, 2011 - 10:02

Ciao! Grazie per questo! Questo mi ha aiutato molto Alex

Marco
febbraio 11th, 2012 - 16:45

Ciao a tutti, vi chiedo un consiglio devo ricercare del testo in una pagina html tipo @aaa bbb ccc@ oppure @aaa bbb@ devo trasformarlo in aaa bbb ccc (nel primo caso) oppure aaa bbb Non ci salto fuori

chalda
febbraio 12th, 2012 - 01:43

Ciao Marco, suppongo che tu indenda in php Per rimpiazzare il testo pasta che tu utilizzi preg_replace:
1 $ t e s t o=p r e g _ r e p l a c e ( ' / @ ( . * ? ) @ / ' ,' < ah r e f = " h t t p : / / x x x / $ 1 "r e l = " n o f o l l o w " > $ 1 < / a > ' ,$ t e s t o ) ;

Simone
febbraio 14th, 2012 - 12:18

Ciao, sto eseguendo un url-rewrite tramite il file .htaccess con il seguente codice ^news/([a-z._-]+)/([0-9]+).html$ Ora devo implementare lespressioni regolari permettendo gli e caratteri speciali come posso fare? Vi ringrazio in anticipo

chalda
febbraio 18th, 2012 - 10:23

Ciao Simone, Per i caratteri speciali sufficiente aggiungere un backslash (\) prima. Per esempio * diventa \*. Ciao

Hurry
febbraio 22nd, 2012 - 10:07

Ciao, e grazie per la guida. E possibile unire pi espressioni come [:BLANK:] e [:punct:] grazie di nuovo

chalda
marzo 4th, 2012 - 11:30

Ciao Hurry, http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

10/14

29/4/2014 Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it Ciao Hurry, Certo, possibile utilizzare quante pi classi si vogliono. Basta utilizzarle seguendo la sintassi corretta!

peppe
aprile 30th, 2012 - 07:44

ciao, mai vista una guida cosi chiara e precisa come questa. credo che verr pi spesso a trovarti

Reyboz Blog
maggio 7th, 2012 - 22:01

Fantastico Avevo bisogno di creare un tag personalizzato per contenere facilmente un parametro di un indirizzo Web, e il testo di quellindirizzo Qualcosa di simile:
1 [ C I C C I O : n u m e r o ] t e s t o [ / C I C C I O ]

Da trasformare in:
1 < ah r e f = " h t t p : / / l o c a l h o s t ? p = n u m e r o "r e l = " n o f o l l o w " > t e s t o > / a > 2 < / a >

Ci ho impiegato 15 minuti a capire da zero come si fa Grazie per laiuto Ecco la mia soluzione:
0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 f u n c t i o nm y B B C O D E ( $ t e s t o ){ $ t e s t o=p r e g _ r e p l a c e ( ' / \ [ c i c c i o : ( [ 0 9 ] + ) \ ] ( [ a z 0 9\ ! \ ? \ ( \ ) \ ] + ) * ? \ [ \ / c i c c i o \ ] / i ' , ' < ah r e f = " l o c a l h o s t ? s = $ 1 "r e l = " n o f o l l o w " > $ 2 < / a > ' , $ t e s t o ) ; r e t u r n$ t e s t o ; } $ t e x t =" [ c i c c i o : 1 2 3 4 5 6 7 8 9 ] F u n z i o n aq u e s t oc o d i c e ? [ / c i c c i o ][ c i c c i o : 1 2 3 ] B o h ! [ / c i c c i o ] " ; e c h o" O r i g i n a l e :$ t e x t" ; e c h o" C o d i f i c a t o :".m y B B C O D E ( $ t e x t ) ;

Morena
maggio 22nd, 2012 - 13:11

Ciao ho tanti file in xml dove devo eliminare del testo composto da attributo pi data. Di solito uso notepad++ ma in questo caso la data non sempre la stessa e credo sia necessario usare le espressione regolari. La stringa che devo eliminare : datavig=20021001 Quale espressione regolare devo utilizzare per i numeri? Grazie e complimenti morena Grazie

luca
giugno 13th, 2012 - 10:33

Ciao mi sa che mi sono complicato la vita la prima volta che affronto questo tipo di espressione. Questo il mio pattern: ho dei nomi presi da un db e non voglio far visualizzare tutta la stringa che ha prefisso [Migra_] o [migra_], ho cominciato ad applicare e.. mi sono perso! Qualcuno pu aiutarmi? Grazie

chalda
giugno 13th, 2012 - 23:08

Ciao Luca, In questo caso ti conviene direttamente filtrare i risultati tramite query, aggiungendo una clausola where NOT LIKE migra% Ciao, Chalda
http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html 11/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

chalda
giugno 13th, 2012 - 23:09

Ciao Morena, lespressione semplificata questa: datavig=[\d]{8} Ciao, Chalda

luca
giugno 14th, 2012 - 09:04

Ciao grazie della risposta ma la query una query ldap e mi ritorna un array e non so se si pu applicare la clausola sql, quindi avevo pensati di filtarre larray. luca

chalda
giugno 14th, 2012 - 23:40

Allora dovresti utilizzare qualcosa del tipo:


1 $ l i s t a _ f i l t r a t a=a r r a y ( ) ; 2 f o r e a c h ( $ a r r a ya s$ r o w ) { 3 i f( ! p r e g _ m a t c h ( ' / ^ m i g r a _ / i ' ,$ r o w ) ) { 4 $ l i s t a _ f i l t r a t a [ ]=$ r o w ; 5 } 6 }

In questo modo nellarray $lista_filtrata avresti tutte le righe che non iniziano per migra o Migra.

luca
giugno 20th, 2012 - 10:58

Grazie! ho applicato il filtro e prometto che studier di pi!

Roberto
giugno 25th, 2012 - 11:47

Guida inserita tra i preferiti anche se nel mio caso, a parte la sintassi, avrei bisogno di maggiori esempi pratici. Nello specifico ho bisogno di poter ricercare (e solo eventualmente modificare) del testo che si trova in una specifica colonna e/o in un range specifico di colonne. Testo di esempio: 1234567890 1234567890 1234567890 1234567890 Risultato da ottenere 1234EF890 1234EF890 1234EF890 1234EF890 Con editors quali SPF possibile dare questo comando: C 56 EF 5 6 ALL (ossia Change stringa1 con stringa2 tra le posizioni 5 e 6 del testo tutte le occorrenze semplice vero?). Ovviamente dovrebbe essere possibile sostituire anche con stringhe di diversa dimensione es 56 con PIPPO o con 0 etc. Visto che Notepad++ NON mette a disposizione un campo position o column o range durante la ricerca del testo, lunica ricorrere alle espressioni regolari semprech siano comode allo scopo. Si pu avere un esempio specifico per questi casi ? Sarebbe bello se eventualmente venisse scritto un plugin di ricerca avanzata che consenta appunto di generare ed eseguire lespressione regolare di ricerca in base ai parametri indicati sarebbe pi alla portata di qualsiasi utente (bisogna ammettere che le espressioni regolari non sono poi tanto intuitive). Grazie. http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html
12/14

29/4/2014

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

Grazie.

chalda
giugno 29th, 2012 - 22:22

Ciao Roberto, se il testo da modificare tutto uguale e nella stessa posizione la cosa pi semplice da fare con notepad++ selezionare tutte le righe con il mouse tenendo premuto il tasto maiuscolo e poi editarle tutte assieme Questa funzionalit utilissima ma non nota a molti

Roberto
luglio 6th, 2012 - 08:23

Ciao chalda, in realt quella funzionalit la conosco benissimo e la utilizzo (ma solo quando possibile farlo), come spiegato per vorrei poter RICERCARE del testo in una specifica posizione (colonna) e/o in un range (es: da pos. 6 a pos 15) e SOLO quando viene trovata contarla e/o sostituirla con altro testo. Capirai che se devo sostituire ad esempio PIPPO con PLUTO ho tre righe cos: 12345PIPPO12345 123456789012345 1234PIPPO012345 PIPPO6789012345 123456PIPPO2345 E volessi sostituire PIPPO con PLUTO ma SOLO se presente nel range di colonne 6-15 dovrei poter ottenere questo: 12345PLUTO12345 123456789012345 1234PIPPO012345 PIPPO6789012345 123456PLUTO1234 Come fai a fare una cosa del genere con mouse e tasto maiuscolo? (O forse sarebbe meglio di re tasto ALT). Sarebbe stato utile anche poter selezionare il testo nel range di colonne desiderato e poi richiedere la find o la sostituzione nella selezione, ma notepad++ NON lo consente. Da qui lesigenza di comprendere bene lutilizzo delle espressioni regolari che potrebbero essere lunica alternativa, ma anche se potentissime, NON sono lideale per poter favorire lutilizzo di notepad++ o altri editor da parte di utenti meno smaliziati (e pensa che io non sono tra gli utenti meno smaliziati ). Tu riesci a fare un conteggio ed eventualmente una sostituzione di quei casi che ti ho fatto vedere ? Ovviamente sarebbe stato TANTO MEGLIO aggiungere alla schermata di cerca o sostituisci delleditor, anche una casella Da Posizione a Posizione molto pi inuitivo non trovi? Ciao e grazie.

mario
agosto 1st, 2012 - 13:35

La guida fatta bene, complimenti solo che i modificatori, i quantificatori etc.. compaiono sempre in maiuscolo. Questo perch nel css c listruzione text-transform: uppercase; e quindi solo dal sorgente possibile capire se sono maiuscole o minuscole. Es. \B indentifica il punto tra due caratteri che siano \w a sinistra e non \w a destra \B identifica lopposto di \b Vedi esempio

Pigreco Lab
novembre 8th, 2012 - 18:12

Ti vorrei fare i miei complimenti !! Finalmente ho trovato una guida molto chiara alle espressioni regolari, che forse comincio a capire per la prima volta. Grazie !!

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

13/14

29/4/2014
marco
novembre 13th, 2012 - 13:41

Guida alla sintassi delle espressioni regolari (con esempi) | chalda.it

la guida se non sbaglio ha un errore: il quantificatore * ritorna anche la i di espressioni

Leave a comment
Nome (required) Email (required) Sito web

Invia
Area admin di wordpress lenta? Problema risolto! Controllo validazione email con php seguendo le specifiche RFC

Copy right 2014 chalda.it Powered by WordPress Lightword Theme translated by Der Tee Blog and Businessangels

Torna in cima

http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html

14/14