English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial PHP Básico

Tutorial PHP Avançado

PHP & MySQL

Manual de Referência PHP

Expressões Regulares PHP

Neste tutorial, você aprenderá como as expressões regulares funcionam e como usá-las de maneira eficiente para fazer correspondências de padrões no PHP.

O que é uma expressão regular

As expressões regulares são geralmente chamadas de regex ou RegExp Uma expressão regular, também conhecida como padrão de texto, é uma string de formato especial usada para encontrar padrões em textos. As expressões regulares são uma das ferramentas mais poderosas disponíveis hoje, capazes de lidar e manipular textos de maneira eficaz. Por exemplo, podem ser usadas para verificar se os dados de entrada do usuário (por exemplo, nome, e-mail, número de telefone, etc.) estão no formato correto, para encontrar ou substituir strings que correspondem a padrões específicos, etc.

PHP(版本5.3PHP (versãoe versões mais recentes) suportam expressões regulares do estilo Perl através de sua série de funções preg_. Por que usar expressões regulares do estilo Perl? Porque o Perl (Linguagem prática de extração e relatório

)é o primeiro idioma de programação mainstream a fornecer suporte integrado para expressões regulares e é conhecido por seu poderoso suporte a expressões regulares e extraordinárias funcionalidades de processamento e manipulação de texto.

Antes de explorar o mundo das expressões regulares, vamos primeiro apresentar brevemente as funcionalidades de correspondência de padrão integradas do PHP comuns.Função
Descriçãopreg_match()
Executa correspondência de expressão regular.preg_match_all()
Executa correspondência de expressão regular global.preg_replace()
Executa a busca e substituição de expressão regular.preg_grep()
Retorna os elementos do array que coincidem com o padrão.preg_split()
Usando expressões regulares para dividir uma string em substrings.preg_quote()

Citando caracteres de expressão regular encontrados na string. Atenção:

A função preg_match() do PHP para encontrar o primeiro item correspondente para parar a busca, enquanto a função preg_match_all() continua a busca até o final da string e encontra todos os itens possíveis, não parando no primeiro item correspondente.

Sintaxe da expressão regularA sintaxe da expressão regular inclui o uso de caracteres especiais (não confunda comCaracteres especiais HTML * Caracteres especializados). Caracteres que têm significado especial nos padrões regulares são: . + ?

[ ] ( ) { } ^ $ | \。Cada vez que você quiser usar esses caracteres literalmente, você precisa usar a barra invertida. Por exemplo, para coincidir com ".", você deve escrever \. Todos os outros caracteres adotam automaticamente seu significado literal.

As seções a seguir descrevem as várias opções disponíveis para definir padrões:

Classe de caracteres

Também pode ser definida uma classe de caracteres negativa para coincidir com qualquer caractere exceto aqueles contidos entre os parênteses. A classe de caracteres negativa é definida colocando o sinal de caret (^) imediatamente após o parêntesis esquerdo, por exemplo[^abc].

Você também pode definir classes de caracteres negativas (por exemplo-)ao usar hífen () para definir um intervalo de caracteres [0-9Vamos ver alguns exemplos de classes de caracteres:

Expressão regularO que ela pode fazer
[abc]Coincide com qualquer caractere entre a, b ou c.
[^abc]Coincide com qualquer caractere exceto a, b, c.
[a-z]Coincide com qualquer caractere minúsculo a até z.
[A-Z]Coincide com qualquer caractere de maiúsculas A até Z.
[a-Z]Coincide com qualquer caractere da letra minúscula 'a' à letra maiúscula 'Z'.
[0-9]Coincide com o entre 0 e9entre um número.
[a-z0-9]Coincide com a entre a e z ou a entre 0 e9entre um único caractere.

O exemplo a seguir mostrará como usar expressões regulares e a função preg_match() do PHP para verificar se existe um padrão em uma string:

<?php
$pattern = "/ca[kf]e/";
$text = 	"He 	was 	eating 	cake 	in 	the 	cafe.";
if(preg_match($pattern, 	$text)){
    echo 	"Coincidência encontrada!";
} 	else{
    echo 	"Nenhuma coincidência encontrada.";
}
?>
测试看看‹/›

Da mesma forma, você pode usar a função preg_match_all() para encontrar todas as coincidências em uma string:

<?php
$pattern = "/ca[kf]e/";
$text = 	"He 	was 	eating 	cake 	in 	the 	cafe.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

Dica:As expressões regulares não são exclusivas do PHP. Linguagens como Java, Perl, Python e outras usam os mesmos símbolos para encontrar padrões de texto.

Classes de caracteres predefinidas

Alguns caracteres comuns (como números, letras e espaços) são usados frequentemente o suficiente para terem nomes abreviados. A tabela a seguir lista esses tipos de classes de caracteres predefinidas:

AtalhosO que ela pode fazer
.Coincide com qualquer caractere único, exceto o caractere de nova linha \n.
\dCoincide com qualquer caractere numérico. Igual a [0-9]igual
\DCoincide com qualquer caractere não-número. Igual a [^0-9]igual
\sCoincide com qualquer caractere branco (espaço, tabulação, quebra de linha ou caractere de retorno). Igual a [\t\n\r]
\SCoincide com qualquer caractere não-branco. Igual a [^\t\n\r]
\wCoincide com qualquer caractere alfabético (definido como a até z, A até Z, 0 até9e sublinhado). Igual a [a-zA-Z_0-9]igual
\WCoincide com qualquer caractere não-alfabético. Igual a [^a-Za-Z_0-9]igual

O exemplo a seguir mostrará como usar expressões regulares e a função preg_replace() do PHP para encontrar e substituir espaços em uma string:

<?php
$pattern = "/\s/";
$replacement = 	"-";
$text = 	"Earth 	revolves 	around\nthe\tSun";
//Substituir espaços, quebras de linha e tabulações
echo preg_replace($pattern, $replacement, $text);
echo 	"<br>";
//Substituir apenas espaços
echo 	str_replace(" ", 	"-"	$text");
?>
测试看看‹/›

Quantificadores de repetição

No capítulo anterior, aprendemos como combinar caracteres de várias maneiras. Mas, e se você quiser combinar múltiplos caracteres? Por exemplo, suponha que você precise encontrar uma ou mais instâncias da letra 'p' em uma palavra, ou uma palavra com pelo menos dois 'p', e assim por diante. É aqui que os quantificadores entram em ação. Usando quantificadores, você pode especificar o número de vezes que um caractere deve coincidir em uma expressão regular.

A tabela a seguir lista várias métodos para quantificar padrões específicos:

Expressão regularO que ela pode fazer
p+Coincidir uma ou mais ocorrências da letra p.
p*Coincidir zero ou mais ocorrências da letra p.
p?Coincidir zero ou uma ocorrência da letra p.
p{2}Coincidir exatamente duas letras p.
p{2,3}Coincidir pelo menos duas, mas não mais de três ocorrências da letra p.
p{2,}

Coincidir duas ou mais2ª ocorrência da letra p.

p{3}Coincidir até três ocorrências da letra p

Neste exemplo, a expressão regular usará a função preg_split() do PHP para dividir a string em vírgulas, sequências de vírgulas, espaços ou suas combinações:

<?php
$pattern = "/[\s,]+/";
$text = "My favourite colors are red, green and blue";
$parts = preg_split($pattern, $text);
 
//Percorrer o array $parts e exibir as substrings
foreach($parts as $part){
    echo $part . "<br>";
}
?>
测试看看‹/›

Anchors de posição

Em alguns casos, você pode desejar fazer correspondência no início ou no final de uma linha, palavra ou string. Para fazer isso, você pode usar os pontos de ancoragem. Dois pontos de ancoragem comuns são o sinal de inserção (^) para o início da string e o símbolo de dólar ($) para o final da string.

Expressão regularO que ela pode fazer
^pCoincidir com a letra p no início da linha.
p$Coincidir com a letra p no final da linha.

Neste exemplo, a expressão regular usará a função preg_grep() do PHP para exibir nomes no array que começam com a letra "J":

<?php
$pattern = "/^J/";
$names = array("Jhon Carter", "Clark Kent", "John Rambo");
$matches = preg_grep($pattern, $names);
 
//Percorrer o array $matches e exibir os nomes correspondentes
foreach($matches as $match){
    echo $match . "<br>";
}
?>
测试看看‹/›

Modificadores de padrão

Os modificadores de padrão permitem que você especifique o modo de processamento da correspondência de padrão. Os modificadores de padrão são colocados diretamente após a expressão regular, por exemplo, se você desejar procurar o padrão de maneira insensível a maiúsculas e minúsculas, pode usar o modificador i, conforme mostrado a seguir:/pattern/i. A tabela a seguir lista alguns dos modificadores de padrão mais comuns.

ModificadoresO que ela pode fazer
iTornar a correspondência insensível a maiúsculas e minúsculas.
mAlterar o comportamento de ^ e $ para coincidir com os limites de nova linha (ou seja, o início ou fim de cada linha em strings multilinhas), em vez dos limites da string.
gExecutar uma correspondência global, ou seja, encontrar todas as coincidências.
oAvaliar a expressão apenas uma vez.
sAlterar o comportamento do ponto (.) para coincidir com todos os caracteres, incluindo os caractere de nova linha.
x允许您在正则表达式中使用空格和注释以保持清晰度。

以下示例将向您展示如何使用i修饰符和PHP preg_match_all()函数执行不区分大小写的全局搜索。

<?php
$pattern = "/color/i";
$text = "Color red is more visible than color blue in daylight.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

同样,以下示例显示如何使用^锚点和m修饰符与PHP preg_match_all()函数在多行字符串的每一行的开头进行匹配。

<?php
$pattern = "/^color/im";
$text = "Color red is more visible than \ncolor blue in daylight.";
$matches = preg_match_all($pattern, $text, $array);
echo $matches . " matches were found.";
?>
测试看看‹/›

词边界

单词边界字符(\b)可帮助您搜索以模式开头和/或结尾的单词。例如,正则表达式/\bcar/匹配以模式car开头的单词,并匹配cart, carrot, 或 cartoon,但不匹配oscar。

同样,正则表达式/car\b/匹配以模式car结尾的单词,并且匹配scar, oscar, 或 supercar,但不匹配cart。同样,/\bcar\b/匹配以单词car开头和结尾的单词,并且仅匹配单词car。

以下示例将以粗体突出显示以car开头的单词:

<?php
$pattern = ''/\bcar\w*/';
$replacement = '<b>$0</b>';
$text = 'Words beginning with car: cart, carrot, cartoon. Words ending with car: scar, oscar, supercar.';
echo preg_replace($pattern, $replacement, $text);
?>
测试看看‹/›

我们希望您已经了解了正则表达式的基础知识。要了解如何使用正则表达式验证表单数据,请查看有关PHP表单验证的教程。