preg_match_all

preg_match_all -- Expression régulière globale.

Description

int preg_match_all ( string pattern, string subject, array matches [, int order])

preg_match_all( ) analyse subject pour trouver l'expression pattern et met les résultats dans matches , dans l 'ordre spécifié par order .

Après avoir trouvé un premier résultat , la recherche continue jusqu ' à la fin de la chaîne .

order peut prendre une des deux valeurs suivantes :

PREG_PATTERN_ORDER

L' ordre est tel que $matches[0 ] est un tableau qui contient les résultats qui satisfont le masque complet , $matches[1 ] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante , etc. .

 
?php

 
preg_match_all(

 
"

 
|

 
[^

 
]

 
+

 
(.*

 
)

 
/

 
[^

 
]

 
+

 
|U"

 
,

 
"

 
b

 
example

 
:

 
/

 
b

 
div

 
align=left

 
a

 
test

 
/

 
div

 
"

 
,

 
$out

 
,

 
PREG_PATTERN_ORDER)

 
;

 
print

 
$out[0][0]

 
."

 
,

 
".$out[0][1]

 
.

 
"

 
#92;n"

 
;

 
print

 
$out[1][0]

 
."

 
,

 
".$out[1][1]

 
.

 
"

 
#92;n"

 
;

 
?



Cet exemple va afficher :


b exemple : / b , div align=left ceci est un test / div exemple : , ceci est un test

Ainsi, $out[0] est un tableau qui contient les résultats qui satisfont le masque complet, et $out[1] est un tableau qui contient les balises entre et .

PREG_SET_ORDER

Les résultats sont classés de telle façon que $matches[ 0 ] contient la première série de résultat , $matches[1 ] contient la deuxième série de résultat , etc.. .

 
?php

 
preg_match_all(

 
"

 
|

 
[^

 
]

 
+

 
(.*

 
)

 
/

 
[^

 
]

 
+

 
|U"

 
,

 
"

 
b

 
exemple

 
:

 
/

 
b

 
div

 
align=left

 
un

 
test

 
/

 
div

 
"

 
,

 
$out

 
,

 
PREG_SET_ORDER)

 
;

 
print

 
$out[0][0]

 
."

 
,

 
".$out[0][1]

 
.

 
"

 
#92;n"

 
;

 
print

 
$out[1][0]

 
."

 
,

 
".$out[1][1]

 
.

 
"

 
#92;n"

 
;

 
?



Cet exemple va afficher :


b exemple : / b , exemple : div align=left un test / div , un test

Dans ce cas, $matches[0] est la première série de résultat, et $matches[0][0] contient le texte qui satisfait le masque complet, $matches[0][1] contient le texte de la première parenthèse capturante, etc... De même, $matches[1] contient le texte qui satisfait le masque complet, etc...



Si order est omis , PREG_PATTERN_ORDER est utilisé par défaut .

preg_match_all( ) retourne le nombre de résultat qui satisfont le masque complet , ou FALSE en cas d'échec ou d 'erreur .

Exemple 1 . Extraction de tous les numéros de téléphone d ' un texte .

 
?php

 
preg_match_all(

 
"

 
/

 
#92

 
;(

 
?

 
(

 
#92;d{3})

 
?

 
#92

 
;)

 
?

 
(

 
?(1

 
)

 
[

 
#92;

 
-

 
#92;s

 
]

 
)

 
#92;d{3}

 
-

 
#92;d{4}

 
/

 
x"

 
,

 
"Appelez

 
555-1212

 
ou

 
1-800-555-1212"

 
,

 
$phones)

 
;

 
?





Exemple 2 . Recherche les couples de balises HTML ( gourmand )

 
?php

 
/

 
/

 
Cet

 
exemple

 
utilise

 
les

 
r

 
eacute;

 
f

 
eacute;rences

 
arri

 
egrave;res

 
(

 
#92

 
;

 
#92;2)

 
.

 
/

 
/

 
Elles

 
indiquent

 
agrave

 
;

 
l'analyseur

 
qu'il

 
doit

 
trouver

 
quelquechose

 
qu'il

 
/

 
/

 
a

 
d

 
eacute;j

 
agrave

 
;

 
rep

 
eacute;r

 
eacute

 
;

 
un

 
peu

 
plus

 
t

 
ocirc;t

 
/

 
/

 
le

 
nombre

 
2

 
indique

 
que

 
c'est

 
le

 
deuxi

 
egrave;me

 
jeu

 
de

 
parenth

 
egrave;ses

 
/

 
/

 
capturante

 
qui

 
doit

 
ecirc;tre

 
utilis

 
eacute

 
;

 
(ici

 
,

 
(

 
[

 
#92;w]+))

 
.

 
/

 
/

 
L'antislash

 
est

 
n

 
eacute;cessaire

 
ici

 
,

 
car

 
la

 
cha

 
icirc;ne

 
est

 
entre

 
guillemets

 
doubles

 
$html

 
=

 
"

 
B

 
Texte

 
en

 
gras

 
/

 
B

 
a

 
href=salut.html

 
clique

 
moi

 
/

 
?

 
preg_match_all

 
("

 
/

 
(

 
(

 
[

 
#92;w]+)[

 
?

 
]

 
?

 
)(.*)

 
(

 
#92

 
;

 
/

 
#92

 
;

 
#92;

 
?

 
)

 
/

 
"

 
,

 
$html

 
,

 
$matches)

 
;

 
for

 
($i=0

 
;

 
$i

 
count($matches[0])

 
;

 
$i++

 
)

 
{

 
echo

 
"trouv

 
eacute;

 
:

 
".$matches[0][$i]

 
.

 
"

 
#92;n"

 
;

 
echo

 
"partie

 
1

 
:

 
".$matches[1][$i]

 
.

 
"

 
#92;n"

 
;

 
echo

 
"partie

 
2

 
:

 
".$matches[3][$i]

 
.

 
"

 
#92;n"

 
;

 
echo

 
"partie

 
3

 
:

 
".$matches[4][$i]

 
.

 
"

 
#92;n

 
#92;n"

 
;

 
  }

 
?



Cet exemple va produire : trouv eacute;: B bold text /B partie 1: B partie 2: Test en gras partie 3: /B trouv eacute;: a href=salut.html clique moi /a partie 1: a href=salut.html partie 2: clique moi partie 3: /a

Voir aussi preg_match( ) , preg_replace( ) et preg_split( ) .