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|false
Linguagem de código: PHP ( php )
A preg_match()
função aceita os seguintes parâmetros:
$pattern
uma string que especifica um padrão a ser pesquisado.$subject
é uma string de entrada.$matches
é uma matriz que armazena os resultados da pesquisa. A$matches
matriz é 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_CAPTURE
ePREG_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, apreg_match()
pesquisa começa no início da string. Observe que$offset
está em bytes.
A preg_match()
função retorna 1
se encontrar uma correspondência, 0
se não encontrar ou false
em 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 19
e é 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 $matches
matriz 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_CAPTURE
bandeira. 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_CAPTURE
flag, 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_NULL
sinalizador.
O exemplo a seguir usa a preg_match()
função sem o PREG_UNMATCHED_AS_NULL
sinalizador.
<?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_NULL
sinalizador, a preg_match()
função retorna nulo para o subpadrão sem correspondência.
O exemplo a seguir usa o PREG_UNMATCHED_AS_NULL
sinalizador. Portanto, ele retorna NULL
em 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 1995
Linguagem 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.