You are on page 1of 85

PHP:

Expresses Regulares
Programao de Servidores
Marx Gomes Van der Linden
http://marx.vanderlinden.com.br/ 2
Expresses Regulares

Vrios dos tipos de tarefas mais comumente


executados em administrao de sistemas
envolvem manipulao de texto:

Arquivos de configurao

Logs

ocumentos !"ML

#$digo%fonte e scripts
http://marx.vanderlinden.com.br/ 3
Expresses Regulares

&m aplica'es (e)* frequentemente +


necessrio analisar e modificar strings:

Verificar se um campo de formulrio + vlido,

"elefone

&%mail

Manipular arquivos de templates,

Manipular arquivos de texto e configurao:

Su)stitui'es

#orre'es

Modifica'es
http://marx.vanderlinden.com.br/ 4
Expresses Regulares

&xpress'es regulares fornecem uma maneira


rpida e concisa de fa-er verifica'es e
modifica'es em strings que* manualmente*
requereriam uma grande quantidade de c$digo
repetitivo,

Regular Expression

Regex
http://marx.vanderlinden.com.br/ 5
Histrico

.rigem: "eoria da #omputao

"eoria dos Aut/matos

Linguagens 0ormais

1234: #on5untos 6egulares

1277: 89& : ed : grep

12;7: vi

1988, 1994 Perl


http://marx.vanderlinden.com.br/ 6
Expresso regular

9ma expresso regular + uma seq<=ncia de


caracteres que define um padro >pattern? de
strings,

. mecanismo de express'es regulares mais


simples rece)e como entrada:

9m padro,

9ma string,

& retorna uma das duas alternativas:

. padro foi encontrado

. padro no foi encontrado


http://marx.vanderlinden.com.br/ 7
Expresses Regulares de Perl

&m Perl* toda expresso regular comea e


termina pelo mesmo caractere @ por padro /

&ntre os caracteres //* escreve%se o padro


que se dese5a procurar,
/abc/
http://marx.vanderlinden.com.br/ 8
Caracteres Especiais

#ada caractere em uma expresso regular


>al+m dos delimitadores? pode ser de dois
tipos:

Metacaractere : "em um significado


especAfico no padro

#aractere Literal : Significa ele pr$prio


http://marx.vanderlinden.com.br/ 9
Quati!ica"o: *

* : . caractere anterior* 4 ou mais ve-es,


/ab*c/ ac
abc
abbbbc
abbbbbbc
abb
abwc

http://marx.vanderlinden.com.br/ 10
Quati!ica"o: +

+ : . caractere anterior* 1 ou mais ve-es,


/ab+c/ abc
abbbbc
abbbbbbc
ac
abb
abwc

http://marx.vanderlinden.com.br/ 11
Quati!ica"o: ?

? : . caractere anterior* 4 ou 1 ve-,


/ab?c/ ac
abc
abb
abbc
abbbbc
abwc

http://marx.vanderlinden.com.br/ 12
#etacaractere: .

. : 8ualquer caractere* menos a que)ra de


linBa,
/a.c/ abc
axc
azc
ac
abbc
xc

http://marx.vanderlinden.com.br/ 13
#etacaracteres: .+

.+ : 8ualquer caractere* 1 ou mais ve-es,


/a.+c/ abc
abxc
azzzxc
ac
xc
bbc

http://marx.vanderlinden.com.br/ 14
#etacaracteres: $+

.* : 8ualquer caractere* 4 ou mais ve-es,


/a.*c/ ac
abc
abxc
azzzxc
ab
xc
bbc

http://marx.vanderlinden.com.br/ 15
Caractere de escape: %
/a.\.\+c/ ax.+c
ab.+c
az.+c
ax+c
abc
azzc

\ : "ransforma um metacaractere em um
literal,
http://marx.vanderlinden.com.br/ 16
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/regular/
http://marx.vanderlinden.com.br/ 17
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/uma?/
http://marx.vanderlinden.com.br/ 18
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/a.a/
http://marx.vanderlinden.com.br/ 19
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/pro.+r/
http://marx.vanderlinden.com.br/ 20
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/pro.+r/
http://marx.vanderlinden.com.br/ 21
Quati!icadores 'ulosos

.s quantificadores em express'es regulares >*


e +? so considerados gulosos >greedy?,

Por padro* o mecanismo de regex tenta


encontrar a maior string possAvel que
com)ina com o padro fornecido,

Para evitar o comportamento guloso de um


quantificador* )asta segui%lo com ?,
http://marx.vanderlinden.com.br/ 22
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/pro.+?r/
http://marx.vanderlinden.com.br/ 23
Quati!ica"o: {n}

{n} : . caractere anterior* n ve-es,


/a.{4}f/
axxxxf
abcdef
abbzzf
abcdf
abcdexf

http://marx.vanderlinden.com.br/ 24
Quati!ica"o: {n,m}

{n,m} : . caractere anterior* no mAnimo n e


no mximo m ve-es,
/ax{2,5}f/
axxf
axxxf
axxxxf
axxxxxf
af
axf
axxxxxxf

http://marx.vanderlinden.com.br/ 25
(or&ado grupos: ()

() : Agrupam caracteres* na seq<=ncia


especificada,
/a(bc)*d/
ad
abcd
abcbcd
abcbcbcd
abccd
abcbd
abcbcbc

http://marx.vanderlinden.com.br/ 26
(or&ado grupos: ()

() : . grupo funciona como um su)%regex,


/a(bx+c)*d/
ad
abxcd
abxxxcd
abxcbxxcbxcd
axd
abxcxd
abbxxcd
abcd

http://marx.vanderlinden.com.br/ 27
)ltera"o:

: entro de um grupo* significa CouC


/a(bcx!z)*d/
ad
abcd
ax!zd
abcx!zd
ax!zbcbcx!zd
abd
ax!bd
ax!bcd

http://marx.vanderlinden.com.br/ 28
Classes de caracteres: "#

"# : #ria classes de caracteres equivalentes,


/a"bcd#e/
abe
ace
ade
ae
ab
abbe

http://marx.vanderlinden.com.br/ 29
Classes de caracteres: "#

"# : 0unciona como um grupo* para fins de


quantificao,
/a"bcd#*e/
ae
abe
abce
adbcce
axe
abcd
bbe

http://marx.vanderlinden.com.br/ 30
Classes de caracteres: "$#

"$# : #ria uma classe de caracteres atrav+s


da negao,
/a"$bcd#*e/
ae
axe
ax!xe
aww!we
abe
abcde
axxbxxe
axx

http://marx.vanderlinden.com.br/ 31
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/pro"cg#/
http://marx.vanderlinden.com.br/ 32
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/a"$bcd#*e/
http://marx.vanderlinden.com.br/ 33
Exe&plo
&xpress'es regulares so escritas em uma
linguagem formal que pode ser interpretada por um
processador de expresso regular* um programa
que ou serve um gerador de analisador sinttico ou
examina o texto e identifica partes que casam com
a especificao dada,
/a"$bcd#*e/
http://marx.vanderlinden.com.br/ 34
Classes de caracteres: "x%!#

"x%!# : #ria classes de caracteres


pertencentes a um intervalo,
/a"b%f#+g/
aeg
abcg
adeceg
abxg
adecex

http://marx.vanderlinden.com.br/ 35
Classes de caracteres: "x%!z%w#

"x%!z%w# : #ria classes de caracteres


pertencentes a vrios intervalos,
/a"b%f5%&#+g/
aeg
abcg
adeceg
ade5'(eg
abxg
adecex
ade45'eg

http://marx.vanderlinden.com.br/ 36
Classes de caracteres: "$x%!#

"$x%!...# : #ria classes de caracteres


no%pertencentes a um ou mais intervalos,
/a"$b%f5%&#+g/
a4g
az2g
a)um*g
aeg
abcg
adecex

http://marx.vanderlinden.com.br/ 37
*+ser,a"o

entre de classes de caracteres* +* . e *


perdem seu significado especial,
/ab".*#+c/
ab.c
ab*c
ab..**.c
abc
abxxc
abx.xc

http://marx.vanderlinden.com.br/ 38
Classes de caracteres prede!iidas

-.gito e o/d.gito:

\d , "-%*#

\. , "$-%*#

)l!au&0rico e o/al!au&0rico:

\w , "a%z/%z-%*0#

\1 , "$a%z/%z-%*0#

Espa"o e o/espa"o:

\2 , "\n\r\f\) #

\3 , "$\n\r\f\) #
http://marx.vanderlinden.com.br/ 39
Exe&plo: -ata

ata em formato num+rico


/\d\d?\/\d\d?\/\d{4}/
4/-4/2---
-(/5/2--5
42/44/4**5
/25/2--&
44/42/-&
42%44%4**5

http://marx.vanderlinden.com.br/ 40
Exe&plo: -ata

Simplificando a sintaxe
6\d\d?/\d\d?/\d{4}6
4/-4/2---
-(/5/2--5
42/44/4**5
/25/2--&
44/42/-&
42%44%4**5

http://marx.vanderlinden.com.br/ 41
Exe&plo: -ata

"ornando o formato mais gen+rico:


6\d\d?"/\%\.#\d\d?"/\%\.#(\d\d){4,2}6
4/-4/2---
42/44/4**5
44/42/-&
42%44%4**5
44.2.-*
*%4-/2--4
/25/2--&
42/7a8/(&
42%44%4*5

)te"o1
http://marx.vanderlinden.com.br/ 42
2cores

Dncoras so metacaracteres que determinam


posi'es na string >tamanBoE4?,
$ , FnAcio
9 , 0im
\b , 0ronteira da palavra

Posio entre \w e \1

$ ou 9
\: , Go%fronteira da palavra
http://marx.vanderlinden.com.br/ 43
Exe&plo: -ata

Fsolando a data:
6$\d\d?"/\%\.#\d\d?"/\%\.#(\d\d){4,2}96
4/-4/2---
42/44/4**5

4/-4/2--- fo8 o d8a...
...na2ceu eu 42/44/4**5.

http://marx.vanderlinden.com.br/ 44
Exe&plo: -ata

Fsolando a data:
6\b\d\d?"/\%\.#\d\d?"/\%\.#(\d\d){4,2}\b6
4/-4/2---
42/44/4**5
4/-4/2--- fo8 o d8a...
...na2ceu eu 42/44/4**5.

;o<= = 42%44%4*5.

http://marx.vanderlinden.com.br/ 45
Exe&plo: Edere"o #)C

&ndereo MA#
/$("\da%f/%>#{2}?){5}"\da%f/%>#{2}9/
-4?25?45?'(?&*?/b
--?5-?5'?c-?--?-&

-4?25?45
-42545'(&*/b
-4?25?45?'(?&?/b
-4?25?45?'(?&*?/b?

http://marx.vanderlinden.com.br/ 46
#odi!icadores

Ap$s o caractere que fecBa o regex


>geralmente /?* pode%se colocar um ou mais
modificadores:
8 , Go diferencia maiHsculasIminHsculas
m , #onsidera \n o limite de strings para $ e 9
2 , 0a- o . significar tam)+m que)ra de linBa
x , Fgnora espaos em )ranco* permite
comentrios com 6
@ , Fnverte o significado de * e *?
http://marx.vanderlinden.com.br/ 47
#odi!icador: x

&ndereo MA# com modificador


/$("\da%f#{2}?){5}"\da%f#{2}9/8
-4?25?45?'(?&*?/b
--?5-?5'?c-?--?-&

-4?25?45
-42545'(&*/b
-4?25?45?'(?&?/b
-4?25?45?'(?&*?/b?

http://marx.vanderlinden.com.br/ 48
Exe&plo
a)cdefgBi
5Jlmnopqr
stuv(xK-
/$<Al/ /gB89/
/pCr.2/
http://marx.vanderlinden.com.br/ 49
#odi!icador: m
a)cdefgBi
5Jlmnopqr
stuv(xK-
/$<Al/m /gB89/m
/pCr.2/
http://marx.vanderlinden.com.br/ 50
#odi!icador: 2
a)cdefgBi
5Jlmnopqr
stuv(xK-
/$<Al/m /gB89/m
/pCr.2/2
http://marx.vanderlinden.com.br/ 51
#odi!icador: x
/$
#Cdigo seguido por :, 5 vezes:
(
"\da%f#{2} #Dgito ou hexa
?
) {5}
#Cdigo sem :, 2 vezes:
"\da%f#{2}
9/8x

&ndereo MA#* com espaamento e


comentrios
http://marx.vanderlinden.com.br/ 52
Exe&plo: E/&ail
/$
"\da%z# ("\w%.#*"\w+#)* #Usurio
D
( "\da%z#"\w%#*"\da%z#\. )+ #Domnio
"a%z#{2,*} #Top-eve
9/8x
ful0de)alDmeu28)e.com
ful+de)alDmeu%28)e.com

fulde)alDmeu+28)e.com
fulde)al%Dmeu%28)e.com
fulde)al.Dmeu%28)e.

http://marx.vanderlinden.com.br/ 53
Exe&plo: 3R4 H55P6H55P7
E$(B))p2?)?//
("\da%z#"%\w#*"\da%z#\.)+ #Domnio
"a%z#{2,*} #Top-eve
(?\d{4,4})? #!orta
("%\w/6F?.?+GHIDF#*) #!ar"metros
9E8x
http://marx.vanderlinden.com.br/ 54
Exe&plo: 3R4 H55P6H55P7
B))p2?//www.m2.com/
B))p2?//meu28)e.com?&-&-
B))p?//m2.com/28)e/Bome
B))p?//m2.com/a.pBp?xG5H!G4

f)p?//meuf)p.com
B))p2?//.meu28)e.com
www.meu28)e.com

http://marx.vanderlinden.com.br/ 55
Exe&plo: Cor H5#46C77

#$digo de cor em Bexadecimal para


!"MLI#SS
/$6("a%f\d#){5}(("a%f\d#){5})?9/8
6f2f
64a4
6**''55
6f2f5
6ff
>>>>>>

http://marx.vanderlinden.com.br/ 56
Expresses Regulares e& PHP

P!P implementa L mecanismos diferentes e


independentes de express'es regulares:

0un'es /$ereg0.+/

&xpress'es regulares P.SFM

0un'es /$preg0.+/

&xpress'es regulares Perl


http://marx.vanderlinden.com.br/ 57
preg8&atc9

A funo preg0ma)cB verifica se um padro


est presente em uma string dada,

Sintaxe >simplificada?:

preg0ma)cB(9padrJo, 9alKo)

6etorna 1 se a expresso for encontradaN


4 se no for,
http://marx.vanderlinden.com.br/ 58
Exe&plo
9)ex)o4 G LMomeNando com abcdefg...LO
9)ex)o2 G LPerm8nando com z!xwu)...LO
8f ( preg0ma)cB(L/abc/L, 9)ex)o4) )
ecBo Q9)ex)o4 oAEQO
8f ( preg0ma)cB(L/abc/L, 9)ex)o2) )
ecBo Q9)ex)o2 oAEQO
MomeNando com abcdefg... oAE
http://marx.vanderlinden.com.br/ 59
preg8&atc9

O possAvel passar um terceiro parPmetro para


preg0ma)cB* um arraK onde sero guardados
os grupos de express'es encontrados,

preg0ma)cB(9padrJo, 9alKo,
H9cap)ura2)

Go arraK 9cap)ura2* o Andice 4


corresponde Q su)string encontrada, .s
Andices 1*L*R* aos grupos de express'es
delimitados por (),
http://marx.vanderlinden.com.br/ 60
preg8&atc9
9regex G L6(\d\d?)"/\%.#(\d\d?)"/\%.#
((\d\d){4,2})6LO
9)ex)o G QMarl 3agan, na2c8do em
*/44/4*54, = con28derado por mu8)o2 o
ma8or d8Kulgador da c8Rnc8a Cue o mundo
<S conBeceu.QO
8f(preg0ma)cB(9regex, 9)ex)o, 9m)){
ecBo QMampo2 encon)rado2?TbrU\nQO
for(98G-O 98Tcoun)(9m)O 98++)
ecBo Q98, L9m"98#LTbrU\nQO
}
http://marx.vanderlinden.com.br/ 61
preg8&atc9

SaAda:
Mampo2 encon)rado2?TbrU
-, L*/44/4*54LTbrU
4, L*LTbrU
2, L44LTbrU
5, L4*54LTbrU
4, L54LTbrU
http://marx.vanderlinden.com.br/ 62
'rupo se& captura: (??...)

(??...) : 0orma um grupo que no +


incluAdo no arraK de captura,
/a(??bx+c)*d/
ad
abxcd
abxxxcd
abxcbxxcbxcd
axd
abxcxd
abbxxcd
abcd

http://marx.vanderlinden.com.br/ 63
preg8&atc9
9regex G L6(\d\d?)"/\%.#(\d\d?)"/\%.#
((??\d\d){4,2})6LO
9)ex)o G QMarl 3agan, na2c8do em
*/44/4*54, = con28derado por mu8)o2 o
ma8or d8Kulgador da c8Rnc8a Cue o mundo
<S conBeceu.QO
8f(preg0ma)cB(9regex, 9)ex)o, 9m)){
ecBo QMampo2 encon)rado2?TbrU\nQO
for(98G-O 98Tcoun)(9m)O 98++)
ecBo Q98, L9m"98#LTbrU\nQO
}
http://marx.vanderlinden.com.br/ 64
preg8&atc9

SaAda:
Mampo2 encon)rado2?TbrU
-, L*/44/4*54LTbrU
4, L*LTbrU
2, L44LTbrU
5, L4*54LTbrU
http://marx.vanderlinden.com.br/ 65
Exe&plo :16;<
T?pBp 9regex G L
E$(B))p2?)?//
#Domnio
(
(??"\da%z#"%\w#*"\da%z#\.)+
("a%z#{2,*}) #Top-eve
)
(???\d{4,4})? #!orta
("%\w/6F?.?+GHIDF#*) #!ar"metros
9E8xLO
9url G LB))p?//marx.Kanderl8nden.com.br/
p2.pBpLO
http://marx.vanderlinden.com.br/ 66
Exe&plo :;6;<
8f (preg0ma)cB(9regex, 9url, 9m)) {
?U
TulU
Tl8U@VW? T?pBp ecBo 9m"-# ?UT/l8U
Tl8UXro)ocolo? T?pBp ecBo 9m"4# ?UT/l8U
Tl8U.omYn8o?T?pBp ecBo 9m"2# ?U
T/l8U
Tl8UPop%leKel? T?pBp ecBo 9m"5# ?UT/l8U
Tl8UMam8nBo? T?pBp ecBo 9m"4# ?UT/l8U
T/ulU
T?pBp } ?U
http://marx.vanderlinden.com.br/ 67
7a.da
http://marx.vanderlinden.com.br/ 68
=o&eado os grupos

&m P!P* + possAvel nomear os grupos* para


facilitar a identificao no arraK,

(?TnomeU...)
/a(?Tle)ra2Ubx+c)*d/
http://marx.vanderlinden.com.br/ 69
Exe&plo :16;<
T?pBp 9regex G L
E$(?Tpro)oU B))p2?)?//
#Domnio
(?Tdom8n8oU
(??"\da%z#"%\w#*"\da%z#\.)+
(?T)opU "a%z#{2,*}) #Top-eve
)
(???\d{4,4})? #!orta
(?TparU "%\w/6F?.?+GHIDF#*)
9E8xLO
9url G LB))p?//marx.Kanderl8nden.com.br/
p2.pBpLO
http://marx.vanderlinden.com.br/ 70
Exe&plo :;6;<
8f (preg0ma)cB(9regex, 9url, 9m)) { ?U
TulU
Tl8U@VW? T?pBp ecBo 9m"-# ?UT/l8U
Tl8UXro)ocolo? T?pBp ecBo 9m"pro)o# ?U
T/l8U
Tl8U.omYn8o?
T?pBp ecBo 9m"dom8n8o# ?U
T/l8U
Tl8UPop%leKel? T?pBp ecBo 9m")op# ?U
T/l8U
Tl8UMam8nBo? T?pBp ecBo 9m"par# ?U
T/l8U
T/ulU T?pBp } ?U
http://marx.vanderlinden.com.br/ 71
preg8&atc98all

preg0ma)cB0all(9padrJo, 9alKo,
H9cap)ura2)

Susca o 9padrJo em 9alKo* quantas ve-es


ele aparecer,

6etorna o nHmero de ve-es em que o


padro foi encontrado,

9cap)ura2 + modificado para se tornar um


arraK de arraKs
http://marx.vanderlinden.com.br/ 72
Exe&plo
92 G Labc abbcd abbccxd acxd abbccdLO
8f(preg0ma)cB0all(
L/a("bc#+)(x?)d/L, 92, 9enc
)){
for(98G-O 98Tcoun)(9enc"-#)O 98++){
ecBo
QT2)rongU{9enc"-#"98#}? T/2)rongUQO
ecBo
QL{9enc"4#"98#}L, L{9enc"2#"98#}LQO
ecBo QTbrUQO
}
}
http://marx.vanderlinden.com.br/ 73
7a.da
http://marx.vanderlinden.com.br/ 74
preg8&atc98all

preg0ma)cB0all(9padrJo, 9alKo,
H9cap)ura2, "9flag#)

O possAvel passar um quarto parPmetro para


preg0ma)cB0all* para mudar a maneira
como o arraK 9cap)ura2 + organi-ado:

XVZ[0X/PPZV\0]V.ZV >padro?

XVZ[03ZP0]V.ZV
http://marx.vanderlinden.com.br/ 75
Exe&plo
92 G Labc abbcd abbccxd acxd abbccdLO
8f(preg0ma)cB0all(
L/a("bc#+)(x?)d/L, 92, 9enc,
XVZ[03ZP0]V.ZV
)){
foreacB(9enc a2 9m){
ecBo
QT2)rongU9m"-#? T/2)rongU QO
ecBo QL9m"4#L, L9m"2#LQO
ecBo QTbrUQO
}
}
http://marx.vanderlinden.com.br/ 76
preg8replace

preg0replace(9padrJo, 9noKo, 9alKo,


"9l8m8)e#)

6etorna uma string su)stituindo todas as


ocorr=ncias de 9padrJo por 9noKo* na
string 9alKo,

9padrJo e 9noKo podem ser arraKs,

Se especificado* fa- no mximo 9l8m8)e


su)stitui'es,
http://marx.vanderlinden.com.br/ 77
preg8replace
9alKo G L] ga)o per2egu8u o ra)o, Cue
com8a Cue8<oLO
9noKo G preg0replace(
L/"gr#a)o/L, LmacacoL, 9alKo
)O
ecBo 9noKoO
] macaco per2egu8u o macaco, Cue com8a
Cue8<o.

SaAda:
http://marx.vanderlinden.com.br/ 78
preg8replace
9alKo G L] ga)o per2egu8u o ra)o, Cue
com8a Cue8<o.LO
9bu2ca G
arra!(L/"gr#a)o/L,L/C\w{5}/L)O
92ub2) G arra!(LmacacoL, LbananaL)O
ecBo preg0replace(
9bu2ca, 92ub2), 9alKo )O
] macaco per2egu8u o macaco, Cue com8a
banana.

SaAda:
http://marx.vanderlinden.com.br/ 79
preg8grep

preg0grep(9padrJo, 9arra!, "9flag#)

6etorna um novo arraK* contendo todos os


elementos de 9arra! que correspondem ao
padro,

Se flag for igual a XVZ[0[VZX0^\_ZVP*


retorna um 9arra! contendo todos os
elementos de arraK que o correspondem
ao padro,
http://marx.vanderlinden.com.br/ 80
Exe&plo :16;<
9regex G L/$"\da%z#("\w%.#*"\w+#)*D("\da
%z#"\w%#*"\da%z#\.)+"a%z#{2,*}9/8LO
9l82)a G arra!(
Lbar)D28mp2on.comL,
LMBunA!loKer55Daol.comL,
Lned%flander2D!aBoo.com.L,
LfredDfl8n)2)one2.comL,
Lbarne!0Dfl8n)2)one2.comL,
L2)anle!D2ou)B+parA.comL
)O
http://marx.vanderlinden.com.br/ 81
Exe&plo :;6;<
ecBo
LZ%ma8l2 KSl8do2?TulUTl8UL,
8mplode(
LT/l8UTl8UL,
preg0grep(9regex, 9l82)a)
), LT/l8UT/ulULO
ecBo
LZ%ma8l2 nJo%KSl8do2?TulUTl8UL,
8mplode(
LT/l8UTl8UL,
preg0grep(9regex, 9l82)a,
XVZ[0[VZX0^\_ZVP)
), LT/l8UT/ulULO
http://marx.vanderlinden.com.br/ 82
7a.da
http://marx.vanderlinden.com.br/ 83
preg8split

preg02pl8)(9padrJo, 9alKo,
"9l8m8)e#)

6etorna um arraK contendo o resultado da


partio do 9alKo* de acordo com o
delimitador especificado em 9padrJo,
http://marx.vanderlinden.com.br/ 84
Exe&plo
92)a)8on2 G L/rrow,3wan >lame O XearlO
]rcB8d,3)aff, ;!dra O WooA8ng
[la22,Pempe2)LO
ecBo LTulULO
foreacB(
preg02pl8)(L/"\2,O#+/L, 92)a)8on2)
a2 92)
{
ecBo QTl8U\Q92\QT/l8UQO
}
ecBo LT/ulULO
http://marx.vanderlinden.com.br/ 85
7a.da

You might also like