Resumo : neste tutorial, você aprenderá como usar a preg_match_all()
função PHP para procurar todas as correspondências de uma expressão regular em uma string.
Introdução à função PHP preg_match_all()
A preg_match_all()
função procura todas as correspondências com uma expressão regular em uma string.
Ao contrário da preg_match()
função que para de pesquisar quando encontra a primeira correspondência, a preg_match_all()
função continua procurando as próximas correspondências até o final da string.
O seguinte mostra a sintaxe da preg_match_all()
função:
preg_match_all(
string $pattern,
string $subject,
array &$matches = null,
int $flags = 0,
int $offset = 0
): int|false|null
Linguagem de código: PHP ( php )
A preg_match_all()
função aceita os seguintes parâmetros:
$pattern
é uma string que especifica o padrão a ser pesquisado.$subject
é a string de entrada para corresponder ao padrão.$matches
é uma matriz multidimensional que contém todas as correspondências.$flags
é uma combinação dos sinalizadoresPREG_PATTERN_ORDER
,PREG_SET_ORDER
,PREG_OFFSET_CAPTURE
ePREG_UNMATCHED_AS_NULL
. Por padrão,$flags
éPREG_PATTERN_ORDER
se você ignorá-lo.$offset
é um número inteiro que especifica a posição a partir da qual a pesquisa começa. Por padrão, apreg_match_all()
função começa a pesquisar desde o início da string.
A preg_match_all()
função retorna um número que especifica o número de correspondências completas de padrões. Se não houver correspondência, a preg_match_all()
função retorna zero. Em caso de falha, ele retorna false
.
Exemplos de funções PHP preg_match_all()
Vejamos alguns exemplos de uso da preg_match_all()
função.
1) Usando a função PHP preg_match_all() para combinar números em um exemplo de string
O exemplo a seguir usa a preg_match_all()
função para pesquisar todos os números com um ou mais dígitos em uma string:
<?php
$pattern = '/\d+/';
$str = 'PHP 1.0 released in 1995';
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => Array
(
[0] => 1
[1] => 0
[2] => 1995
)
)
Linguagem de código: PHP ( php )
Ele retorna três correspondências 0
,, 1
e 1995
. Se você usar a preg_match()
função, ela retornará 1
apenas o primeiro número ().
2) Usando a função preg_match_all() com parâmetros de flags
O exemplo a seguir usa a preg_match_all()
função para corresponder à palavra em uma string. Ele também captura o primeiro caractere de cada palavra:
<?php
$pattern = '/\b([a-zA-Z])\w+\b/';
$str = 'Alice, Bob, Peter';
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => Array
(
[0] => Alice
[1] => Bob
[2] => Peter
)
[1] => Array
(
[0] => A
[1] => B
[2] => P
)
)
Linguagem de código: PHP ( php )
A $matche
matriz s contém todas as correspondências de padrões no primeiro elemento e os grupos de captura no segundo elemento. Ele retorna o mesmo resultado como se você usasse o PREG_PATTERN_ORDER
sinalizador.
Se quiser agrupar cada conjunto de correspondências em um elemento de array, você pode usar o PREG_SET_ORDER
sinalizador.
A PREG_SET_ORDER
bandeira agrupa o primeiro conjunto de correspondências no $matches[0]
, o segundo conjunto de correspondências no $matches[1]
, e assim por diante. Por exemplo:
<?php
$pattern = '/\b([a-zA-Z])\w+\b/';
$str = 'Alice, Bob, Peter';
if (preg_match_all($pattern, $str, $matches, PREG_SET_ORDER)) {
print_r($matches);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => Array
(
[0] => Alice
[1] => A
)
[1] => Array
(
[0] => Bob
[1] => B
)
[2] => Array
(
[0] => Peter
[1] => P
)
)
Linguagem de código: PHP ( php )
Também pode $flags
ser:
PREG_OFFSET_CAPTURE
retorna o deslocamento da correspondência junto com a string correspondente.PREG_UNMATCHED_AS_NULL
retornaNULL
em vez de uma string vazia se nenhuma correspondência for encontrada para os subpadrões, também conhecidos como grupos de captura .
Para combinar sinalizadores, você coloca o |
operador entre dois deles. Por exemplo:
<?php
$pattern = '/\b([a-zA-Z])\w+\b/';
$str = 'Alice, Bob, Peter';
if (preg_match_all($pattern, $str, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
print_r($matches);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Alice
[1] => 0
)
[1] => Array
(
[0] => A
[1] => 0
)
)
[1] => Array
(
[0] => Array
(
[0] => Bob
[1] => 7
)
[1] => Array
(
[0] => B
[1] => 7
)
)
[2] => Array
(
[0] => Array
(
[0] => Peter
[1] => 12
)
[1] => Array
(
[0] => P
[1] => 12
)
)
)
Linguagem de código: PHP ( php )
Observe que não faz sentido combinar sinalizadores PREG_PATTERN_ORDER
e PREG_SET_ORDER
.
Resumo
- Use a função PHP
preg_match_all()
para procurar todas as correspondências em uma string.