PHP preg_match_all

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|nullLinguagem 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 sinalizadores PREG_PATTERN_ORDER, PREG_SET_ORDER, PREG_OFFSET_CAPTUREe PREG_UNMATCHED_AS_NULL. Por padrão, $flagsé PREG_PATTERN_ORDERse você ignorá-lo.
  • $offseté um número inteiro que especifica a posição a partir da qual a pesquisa começa. Por padrão, a preg_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,, 1e 1995. Se você usar a preg_match()função, ela retornará 1apenas 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 $matchematriz 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_ORDERsinalizador.

Se quiser agrupar cada conjunto de correspondências em um elemento de array, você pode usar o PREG_SET_ORDERsinalizador.

A PREG_SET_ORDERbandeira 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 $flagsser:

  • PREG_OFFSET_CAPTUREretorna o deslocamento da correspondência junto com a string correspondente.
  • PREG_UNMATCHED_AS_NULLretorna NULLem 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_ORDERe PREG_SET_ORDER.

Resumo

  • Use a função PHP preg_match_all()para procurar todas as correspondências em uma string.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *