PHP preg_match

Resumo : neste tutorial, você aprenderá sobre a preg_match()função PHP para corresponder a uma expressão regular.

Introdução à função preg_match() do PHP

O preg_match()encontra a string para uma correspondência com uma expressão regular . A preg_match()função para de pesquisar enquanto encontra a primeira correspondência.

Aqui está a sintaxe da preg_match()função:

preg_match(
    string $pattern,
    string $subject,
    array &$matches = null,
    int $flags = 0,
    int $offset = 0
): int|falseLinguagem de código:  PHP  ( php )

A preg_match()função aceita os seguintes parâmetros:

  • $patternuma string que especifica um padrão a ser pesquisado.
  • $subjecté uma string de entrada.
  • $matchesé uma matriz que armazena os resultados da pesquisa. A $matchesmatriz é opcional. Se houver uma correspondência, $matches[0]conterá o texto que corresponde a todo o padrão, $matches[1]conterá o texto que corresponde ao primeiro grupo de captura e assim por diante.
  • $flagsé uma combinação dos seguintes sinalizadores: PREG_OFFSET_CAPTUREe PREG_UNMATCHED_AS_NULL. Mais sobre esses sinalizadores no exemplo abaixo.
  • $offseté a posição que a função começará a pesquisar. Por padrão, a preg_match()pesquisa começa no início da string. Observe que $offsetestá em bytes.

A preg_match()função retorna 1se encontrar uma correspondência, 0se não encontrar ou falseem caso de falha.

Exemplos de funções PHP preg_match()

Vejamos alguns exemplos de uso da preg_match()função.

1) Usando PHP preg_match() para corresponder a um número

O exemplo a seguir usa o preg_match()para corresponder um número a um ou mais dígitos usando a \d+ classe de caracteres :

<?php

$pattern = '/\d+/';
$str = 'PHP first released in 8 June 1995';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 8
)Linguagem de código:  PHP  ( php )

Observe que o preg_match()programa para de pesquisar assim que encontra uma correspondência. Neste exemplo, 1995 também corresponde ao padrão \d+. Porém, o preg_match()já encontra uma correspondência com o número 8.

Para encontrar todas as correspondências, você precisa usar a preg_match_all()função.

2) Usando PHP preg_match() para corresponder a um caractere de palavra

O exemplo a seguir usa a preg_match()função para corresponder a um ou mais caracteres de palavra:

<?php

$pattern = '/\w+/';
$str = 'PHP first released in 8 June 1995';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => PHP
)Linguagem de código:  PHP  ( php )

3) Usando o PHP preg_match() com um exemplo de grupo de captura

O exemplo a seguir usa a preg_match()função para corresponder a um número que começa 19e é seguido por exatamente dois dígitos. O padrão também possui um grupo de captura que captura os dois últimos dígitos:

<?php

$pattern = '/19(\d{2})/';
$str = 'PHP first released in 8 June 1995';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => 1995
    [1] => 95
)Linguagem de código:  PHP  ( php )

A $matchesmatriz contém dois elementos. O primeiro elemento contém o texto que corresponde a todo o padrão, enquanto o segundo elemento contém o primeiro grupo de captura (\d{2}).

O exemplo a seguir usa o mesmo padrão com o grupo de captura nomeado adicional:

<?php

$pattern = '/19(?<year>\d{2})/';
$str = 'PHP first released in 8 June 1995';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

(
    [0] => 1995
    [year] => 95
    [1] => 95
)Linguagem de código:  PHP  ( php )

4) Usando a função PHP preg_match() com o sinalizador PREG_OFFSET_CAPTURE

Às vezes, você deseja encontrar uma correspondência em uma string e a posição inicial da correspondência. Para fazer isso, você usa a PREG_OFFSET_CAPTUREbandeira. Por exemplo:

<?php

$pattern = '/[A-Z]{3}/';
$str = 'Hello PHP';

if (preg_match($pattern, $str, $matches, PREG_OFFSET_CAPTURE)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => Array
        (
            [0] => PHP
            [1] => 6
        )
)Linguagem de código:  PHP  ( php )

Neste exemplo, o [A-Z]{3}padrão corresponde a qualquer texto com três letras maiúsculas. Como usamos o PREG_OFFSET_CAPTUREflag, ele retorna a correspondência (PHP) e a posição inicial (ou deslocamento) do texto PHP na string.

5) Usando a função preg_match() com o sinalizador PREG_UNMATCHED_AS_NULL

Por padrão, a preg_match()função retorna uma string vazia para o grupo de captura (ou subpadrão) sem correspondência.

Se quiser que a preg_match()função retorne nulo, você pode usar o PREG_UNMATCHED_AS_NULLsinalizador.

O exemplo a seguir usa a preg_match()função sem o PREG_UNMATCHED_AS_NULLsinalizador.

<?php

$pattern = '/[A-Z]{3}(\s*)(\d+.\d*.\d*)*/';
$str = 'Hello PHP 8.0.1';

if (preg_match($pattern, $str, $matches)) {
    var_dump($matches);
}Linguagem de código:  PHP  ( php )

Saída:

array(3) {
    [0]=>  string(9) "PHP 8.0.1"
    [1]=>  string(1) " "
    [2]=>  string(5) "8.0.1"
}Linguagem de código:  PHP  ( php )

Neste exemplo, a string contém o texto que corresponde aos subpadrões (\s*)(\d+.\d*.\d\*).

No entanto, no exemplo a seguir, a string não possui um texto que corresponda ao subpadrão:

<?php

$pattern = '/[A-Z]{3}(\s*)(\d+.\d*.\d*)*/';
$str = 'Hello PHP';

if (preg_match($pattern, $str, $matches)) {
    var_dump($matches);
}Linguagem de código:  PHP  ( php )

Saída:

array(2) {
    [0]=>  string(3) "PHP"
    [1]=>  string(0) ""
}Linguagem de código:  PHP  ( php )

A string não possui nenhum texto que corresponda ao (\s\*)subpadrão e preg_match()retorna uma string vazia.

Como usamos o PREG_UNMATCHED_AS_NULLsinalizador, a preg_match()função retorna nulo para o subpadrão sem correspondência.

O exemplo a seguir usa o PREG_UNMATCHED_AS_NULLsinalizador. Portanto, ele retorna NULLem vez de uma string vazia para o subpadrão sem correspondência:

<?php

$pattern = '/[A-Z]{3}(\s*)(\d+.\d*.\d*)*/';
$str = 'Hello PHP';

if (preg_match($pattern, $str, $matches, PREG_UNMATCHED_AS_NULL)) {
    var_dump($matches);
}Linguagem de código:  PHP  ( php )

Saída:

array(2) {
    [0]=>  string(3) "PHP"
    [1]=>  NULL
}Linguagem de código:  PHP  ( php )

6) Usando o php preg_match() com o parâmetro offset

Suponha que você tenha a seguinte string:

PHP 1.0 released in 1995Linguagem de código:  PHP  ( php )

Se você usar \d+, ele corresponderá ao primeiro número, que é 1.

No entanto, se você passar um parâmetro offset que especifique a posição inicial da pesquisa, ele corresponderá ao segundo número 1995:

<?php

$pattern = '/\d+/';
$str = ' PHP 1.0 released in 1995';

if(preg_match($pattern, $str,$matches, PREG_OFFSET_CAPTURE, 10)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => Array
        (
            [0] => 1995
            [1] => 21
        )
)Linguagem de código:  PHP  ( php )

Neste exemplo, a preg_match()função começa a procurar correspondências na posição dez em vez de 0.

Observe que o padrão pode conter afirmações como ^, $ou (?<=A). Portanto, o deslocamento não equivale a passar a substring para a preg_match()função.

Resumo

  • Use a função PHP preg_match()para procurar uma correspondência com um padrão em uma string.

Deixe um comentário

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