Source of: /manual/fr/function.preg-match-all.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.pcre.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'fr',
),
'this' =>
array (
0 => 'function.preg-match-all.php',
1 => 'preg_match_all',
),
'up' =>
array (
0 => 'ref.pcre.php',
1 => 'Fonctions PCRE',
),
'prev' =>
array (
0 => 'function.preg-last-error.php',
1 => 'preg_last_error',
),
'next' =>
array (
0 => 'function.preg-match.php',
1 => 'preg_match',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="function.preg-match-all" class="refentry">
<div class="refnamediv">
<h1 class="refname">preg_match_all</h1>
<p class="verinfo">(PHP 4, PHP 5)</p><p class="refpurpose"><span class="refname">preg_match_all</span> — <span class="dc-title">Expression rationnelle globale</span></p>
</div>
<a name="function.preg-match-all.description"></a><div class="refsect1 description">
<h3 class="title">Description</h3>
<div class="methodsynopsis dc-description">
<span class="type">int</span> <span class="methodname"><b>preg_match_all</b></span>
( <span class="methodparam"><span class="type">string</span> <tt class="parameter">$pattern</tt></span>
, <span class="methodparam"><span class="type">string</span> <tt class="parameter">$subject</tt></span>
, <span class="methodparam"><span class="type">array</span> <tt class="parameter reference">&$matches</tt></span>
[, <span class="methodparam"><span class="type">int</span> <tt class="parameter">$flags</tt></span>
[, <span class="methodparam"><span class="type">int</span> <tt class="parameter">$offset</tt></span>
]] )</div>
<p class="para rdfs-comment">
Analyse <i><tt class="parameter">subject</tt></i>
pour trouver l'expression
<i><tt class="parameter">pattern</tt></i>
et met les résultats dans
<i><tt class="parameter">matches</tt></i>
, dans l'ordre spécifié par
<i><tt class="parameter">flags</tt></i>
.
</p>
<p class="para">
Après avoir trouvé un premier résultat, la recherche continue jusqu'à
la fin de la chaîne.
</p>
</div>
<a name="function.preg-match-all.parameters"></a><div class="refsect1 parameters">
<h3 class="title">Liste de paramètres</h3>
<p class="para">
</p><dl>
<dt class="varlistentry">
<span class="term"><i><tt class="parameter">pattern</tt></i>
</span>
</dt><dd class="listitem">
<p class="para">
Le masque à chercher, sous la forme d'une <a href="language.types.string.php" class="link">chaîne de caractères</a>.
</p>
</dd>
<dt class="varlistentry">
<span class="term"><i><tt class="parameter">subject</tt></i>
</span>
</dt><dd class="listitem">
<p class="para">
La chaîne d'entrée.
</p>
</dd>
<dt class="varlistentry">
<span class="term"><i><tt class="parameter">matches</tt></i>
</span>
</dt><dd class="listitem">
<p class="para">
Tableau contenant tous les résultats, dans un tableau multidimensionnel ordonné
suivant le paramètre <i><tt class="parameter">flags</tt></i>
.
</p>
</dd>
<dt class="varlistentry">
<span class="term"><i><tt class="parameter">flags</tt></i>
</span>
</dt><dd class="listitem">
<p class="para">
Peut prendre une des deux valeurs suivantes
(notez bien qu'il est incohérent d'utiliser
<b><tt class="constant">PREG_PATTERN_ORDER</tt></b> avec
<b><tt class="constant">PREG_SET_ORDER</tt></b> ) :
</p><dl>
<dt class="varlistentry">
<span class="term"><b><tt class="constant">PREG_PATTERN_ORDER</tt></b></span>
</dt><dd class="listitem">
<p class="para">
L'ordre est tel que <var class="varname">$matches[0]</var> est un tableau qui
contient les résultats qui satisfont le masque
complet, <var class="varname">$matches[1]</var> est un tableau qui contient les
résultats qui satisfont la première
parenthèse capturante, etc.
</p>
<p class="para">
</p><div class="informalexample">
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">"|<[^>]+>(.*)</[^>]+>|U"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"<b>exemple : </b><div align=left>ceci est un test</div>"</span><span style="color: #007700">,<br /> </span><span style="color: #0000BB">$out</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_PATTERN_ORDER</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<p class="para">L'exemple ci-dessus va afficher :</p>
<div class="example-contents screen">
<div class="cdata"><pre>
<b>exemple : </b>, <div align=left>ceci est un test</div>
exemple : , ceci est un test
</pre></div>
</div>
<p class="para">
Ainsi, <var class="varname">$out[0]</var> est un tableau qui contient les résultats qui
satisfont le masque complet, et <var class="varname">$out[1]</var> est un tableau qui contient
les balises entre > et <.
</p>
</div><p>
</p>
</dd>
<dt class="varlistentry">
<span class="term"><b><tt class="constant">PREG_SET_ORDER</tt></b></span>
</dt><dd class="listitem">
<p class="para">
Les résultats sont classés de telle façon que <var class="varname">$matches[0]</var>
contient la première série de résultats, <var class="varname">$matches[1]</var> contient
la deuxième, etc.
</p><div class="informalexample">
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">"|<[^>]+>(.*)</[^>]+>|U"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"<b>exemple : </b><div align=\"left\">ceci est un test</div>"</span><span style="color: #007700">,<br /> </span><span style="color: #0000BB">$out</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_SET_ORDER</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$out</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<p class="para">L'exemple ci-dessus va afficher :</p>
<div class="example-contents screen">
<div class="cdata"><pre>
<b>exemple : </b>, exemple :
<div align="left">ceci est un test</div>, ceci est un test
</pre></div>
</div>
</div><p>
</p>
</dd>
<dt class="varlistentry">
<span class="term"><b><tt class="constant">PREG_OFFSET_CAPTURE</tt></b></span>
</dt><dd class="listitem">
<p class="para">
Si cette option est activée, toutes les sous-chaînes qui satisfont
le masque seront aussi identifiées par leur offset. Notez que cela
modifie le format de la valeur retournée, puisque chaque élément
de réponse devient un tableau contenant la sous-chaîne résultat,
à l'index <i>0</i> dans la chaîne <i><tt class="parameter">subject</tt></i>
constant <i>1</i>.
</p>
</dd>
</dl>
<p>
</p>
<p class="para">
Si <i><tt class="parameter">order</tt></i>
est omis,
<b><tt class="constant">PREG_PATTERN_ORDER</tt></b> est utilisé par défaut.
</p>
</dd>
<dt class="varlistentry">
<span class="term"><i><tt class="parameter">offset</tt></i>
</span>
</dt><dd class="listitem">
<p class="para">
Normalement, la recherche commence au début de la chaîne
<i><tt class="parameter">subject</tt></i>
. Le paramètre optionnel
<i><tt class="parameter">offset</tt></i>
peut être utilisé pour spécifier
une position pour le début de la recherche (en octets).
</p>
<blockquote><p><b class="note">Note</b>:
Utiliser le paramètre <i><tt class="parameter">offset</tt></i>
ne revient pas
à passer <i>substr($subject, $offset)</i> à
<b>preg_match_all()</b> à la place de la chaîne
<i><tt class="parameter">subject</tt></i>
, car
<i><tt class="parameter">pattern</tt></i>
peut contenir des assertions comme
<em class="emphasis">^</em>, <em class="emphasis">$</em> ou
<em class="emphasis">(?<=x)</em>. Lisez la documentation
sur la fonction <a href="function.preg-match.php" class="function">preg_match()</a> pour des exemples.
<br />
</p></blockquote>
</dd>
</dl>
<p>
</p>
</div>
<a name="function.preg-match-all.returnvalues"></a><div class="refsect1 returnvalues">
<h3 class="title">Valeurs de retour</h3>
<p class="para">
Retourne le nombre de résultats qui satisfont le masque
complet, ou <b><tt class="constant">FALSE</tt></b> si une erreur survient.
</p>
</div>
<a name="function.preg-match-all.changelog"></a><div class="refsect1 changelog">
<h3 class="title">Historique</h3>
<p class="para">
</p><table class="doctable informaltable">
<thead valign="middle">
<tr valign="middle">
<th>Version</th>
<th>Description</th>
</tr>
</thead>
<tbody valign="middle" class="tbody">
<tr valign="middle">
<td align="left">4.3.3</td>
<td align="left">
Le paramètre <i><tt class="parameter">offset</tt></i>
a été ajouté.
</td>
</tr>
<tr valign="middle">
<td align="left">4.3.0</td>
<td align="left">
Le drapeau <b><tt class="constant">PREG_OFFSET_CAPTURE</tt></b> a été ajouté.
</td>
</tr>
</tbody>
</table>
<p>
</p>
</div>
<a name="function.preg-match-all.examples"></a><div class="refsect1 examples">
<h3 class="title">Exemples</h3>
<p class="para">
</p><div class="example">
<p><b>Exemple #1 Extraction de tous les numéros de téléphone d'un texte</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">"/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x"</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"Call 555-1212 or 1-800-555-1212"</span><span style="color: #007700">, </span><span style="color: #0000BB">$phones</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<p class="para">
</p><div class="example">
<p><b>Exemple #2 Recherche les couples de balises HTML (gourmand)</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">// Cet exemple utilise les références arrières (\\2).<br />// Elles indiquent à l'analyseur qu'il doit trouver quelque chose qu'il<br />// a déjà repéré un peu plus tôt<br />// le nombre 2 indique que c'est le deuxième jeu de parenthèses<br />// capturante qui doit être utilisé (ici, ([\w]+)).<br />// L'antislash est nécessaire ici, car la chaîne est entre guillemets doubles<br /><br /></span><span style="color: #0000BB">$html </span><span style="color: #007700">= </span><span style="color: #DD0000">"<b>texte en gras</b><a href=howdy.html>cliquez moi</a>"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">"/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/"</span><span style="color: #007700">, </span><span style="color: #0000BB">$html</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_SET_ORDER</span><span style="color: #007700">);<br /><br />foreach (</span><span style="color: #0000BB">$matches </span><span style="color: #007700">as </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"matched: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$val</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"part 1: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$val</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"part 2: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$val</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"part 3: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$val</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>L'exemple ci-dessus va afficher :</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
matched: <b>texte en gras</b>
part 1: <b>
part 2: texte en gras
part 3: </b>
matched: <a href=howdy.html>cliquez moi</a>
part 1: <a href=howdy.html>
part 2: cliquez moi
part 3: </a>
</pre></div>
</div>
</div><p>
</p>
<p class="para">
</p><div class="example">
<p><b>Exemple #3 Utilisation d'un sous-masque nommé</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /><br />$str </span><span style="color: #007700">= <<<FOO<br /></span><span style="color: #DD0000">a: 1<br />b: 2<br />c: 3<br /></span><span style="color: #007700">FOO;<br /><br /></span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'/(?<name>\w+): (?<digit>\d+)/'</span><span style="color: #007700">, </span><span style="color: #0000BB">$str</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>L'exemple ci-dessus va afficher :</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
Array
(
[0] => Array
(
[0] => a: 1
[1] => b: 2
[2] => c: 3
)
[name] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => a
[1] => b
[2] => c
)
[digit] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
</pre></div>
</div>
</div><p>
</p>
</div>
<a name="function.preg-match-all.seealso"></a><div class="refsect1 seealso">
<h3 class="title">Voir aussi</h3>
<p class="para">
</p><ul class="simplelist">
<li class="member"><a href="function.preg-match.php" class="function" rel="rdfs-seeAlso">preg_match()</a> - Expression rationnelle standard</li>
<li class="member"><a href="function.preg-replace.php" class="function" rel="rdfs-seeAlso">preg_replace()</a> - Rechercher et remplacer par expression rationnelle standard</li>
<li class="member"><a href="function.preg-split.php" class="function" rel="rdfs-seeAlso">preg_split()</a> - Éclate une chaîne par expression rationnelle</li>
</ul><p>
</p>
</div>
</div><?php manual_footer(); ?>