Referência da função preg_match_all
Uma referência prática da função preg match all
$resultado = preg_match_all($pattern, $subject, $matches, $flags, $offset);
Explicando…
A função preg_match_all() relaciona todas as ocorrências ($matches) de um padrão ($pattern) em uma string ($subject).
A ordem do array resultado ($matches) é influenciado pelo 4º parâmetro ($flags).
O 5º parâmetro ($offset) indica em que posição, na string de pesquisa ($subject), a pesquisa deve iniciar.
Fonte: Gilmore (Dominando PHP e MYSQL, pag. 164)
Protótipo da função
int preg_match_all (
string $pattern,
string $subject
[, array &$matches
[, int $flags = PREG_PATTERN_ORDER
[, int $offset = 0 ]]]
)
Parâmetros
| pattern |
A expressão regular propriamente dita. String de padrão de procura. |
|---|---|
| subject |
Texto que será vasculhado por nossa expresão regular. String de entrada. |
| matches (opcional) |
Array multidimensional ordenado de acordo com o 4º parâmetro (`$flags`) O que nossa expressão regular encontrou. |
| flags (opcional) |
Define a ordem do array resultado (`$matches`), pode ser: `PREG_PATTERN_ORDER` ou `PREG_SET_ORDER`. Quando omitido, o valor pardão é `PREG_PATTERN_ORDER`. |
| offset (opcional) |
Indica em que posição, na string de pesquisa (`$subject`), a pesquisa deve iniciar. |
Mais sobre o quarto parâmetro (flags)
Quando a flag é PREG_PATTERN_ORDER temos o seguinte quadro:
$matches[0] será um array com todas as ocorrências.
$matches[1] será um array com todas as ocorrências que combina com a primeira expressão em parênteses.
Exemplo:
<?php
$pattern = "|<[^>]+>(.*)]+>|U";
$subject = "<b>example: </b><div align=left>this is a test</div>";
preg_match_all($pattern, $subject, $matches, PREG_PATTERN_ORDER);
var_dump($matches);

Quando a flag é PREG_SET_ORDER temos o seguinte quadro:
$matches[0] será um array com elementos realcionados pela primeira expressão regular entre parênteses.
$matches[1] será um array com elementos relacionados pela segunda expressão regular entre parênteses.
<?php
$pattern = "|<[^>]+>(.*)]+>|U";
$subject = "<b>example: </b><div align=left>this is a test</div>";
preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER);
var_dump($matches);

Fonte