English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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ção | preg_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:
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.
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 regular | O 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.
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:
Atalhos | O que ela pode fazer |
---|---|
. | Coincide com qualquer caractere único, exceto o caractere de nova linha \n. |
\d | Coincide com qualquer caractere numérico. Igual a [0-9]igual |
\D | Coincide com qualquer caractere não-número. Igual a [^0-9]igual |
\s | Coincide com qualquer caractere branco (espaço, tabulação, quebra de linha ou caractere de retorno). Igual a [\t\n\r] |
\S | Coincide com qualquer caractere não-branco. Igual a [^\t\n\r] |
\w | Coincide 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 |
\W | Coincide 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"); ?>测试看看‹/›
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 regular | O 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>"; } ?>测试看看‹/›
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 regular | O que ela pode fazer |
---|---|
^p | Coincidir 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>"; } ?>测试看看‹/›
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.
Modificadores | O que ela pode fazer |
---|---|
i | Tornar a correspondência insensível a maiúsculas e minúsculas. |
m | Alterar 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. |
g | Executar uma correspondência global, ou seja, encontrar todas as coincidências. |
o | Avaliar a expressão apenas uma vez. |
s | Alterar 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表单验证的教程。