preg_match_all în PHP

Găsește toate potrivirile unei expresii regulate într-un text și le pune într-un tablou.

Sintaxă
preg_match_all(string $pattern, string $subject, &$matches = null, int $flags = 0, int $offset = 0): int|false

Ce face preg_match_all

Spre deosebire de preg_match, care se oprește la prima potrivire, preg_match_all le găsește pe toate și returnează numărul lor.

Implicit (PREG_PATTERN_ORDER), $matches[0] conține toate potrivirile complete, $matches[1] toate valorile primului grup și așa mai departe. Cu PREG_SET_ORDER, fiecare element al tabloului este o potrivire completă, cu grupurile ei.

Parametri

Parametru Descriere
$pattern Expresia regulată.
$subject Textul în care se caută.
$matches Opțional. Variabilă în care primești potrivirile.
$flags Opțional. PREG_PATTERN_ORDER (implicit), PREG_SET_ORDER, PREG_OFFSET_CAPTURE.
$offset Opțional. Poziția (în octeți) de la care începe căutarea.

Ce returnează

Numărul de potriviri găsite sau false la eroare.

Exemple

Exemplul 1: Toate numerele de telefon dintr-un text

<?php
$text = "Sună la 0742 123 456 sau la 0232-210-500. Fax: 0232210501.";

$numar = preg_match_all('/0\d{3}[ -]?\d{3}[ -]?\d{3}/', $text, $m);
echo "Am găsit $numar numere:\n";
print_r($m[0]);

Rezultat

Am găsit 3 numere:
Array
(
    [0] => 0742 123 456
    [1] => 0232-210-500
    [2] => 0232210501
)

Exemplul 2: Etichete și valori cu PREG_SET_ORDER

<?php
$text = "#php are 47 pagini, #mysql are 30, #javascript are 52";

preg_match_all('/#(\w+) are (\d+)/', $text, $m, PREG_SET_ORDER);
foreach ($m as $potrivire) {
    echo $potrivire[1] . " => " . $potrivire[2] . "\n";
}

Rezultat

php => 47
mysql => 30
javascript => 52

Greșeli frecvente

  • Parcurgi $matches cu foreach și primești grupuri, nu potriviri. În modul implicit, potrivirile complete sunt în $matches[0].

Comenzi înrudite

  • preg_match: Verifică dacă un text se potrivește cu o expresie regulată și extrage prima potrivire.
  • substr_count: Numără de câte ori apare un text în alt text.
  • preg_split: Împarte un text în bucăți folosind o expresie regulată ca separator.