Primeiro, vejamos dois caracteres especiais: '^' e '$' Eles são usados para corresponder ao início e ao final da string,
respectivamente
. of desespero$": corresponde à string que termina com "of desespero";
"^abc$": corresponde à string que começa com abc e termina com abc, na verdade, apenas abc corresponde a ela;
"notice": corresponde a strings contendo warning;
você Você pode ver que se você não usar os dois caracteres que mencionamos (o último exemplo), isso significa que o padrão (expressão regular) pode aparecer em qualquer lugar da string que está sendo verificada, e você não o usa Bloquear nas laterais.
Existem também vários caracteres '*', '+' e '?', que são usados para representar o número ou ordem de ocorrências de um caractere. Eles representam respectivamente: "zero ou mais", "um ou mais" e. "zero ou um." Aqui estão alguns exemplos:
"ab*": Corresponde a uma string que consiste em a e zero ou mais b ("a", "ab", "abbb", etc.)
; acima, mas com pelo menos um b ("ab", "abbb", etc.);
"ab?": corresponde a 0 ou um b;
"a?b+$": corresponde a um ou 0 a seguido de Adicionar mais de um; string terminando com b.
Você também pode limitar o número de caracteres que aparecem entre chaves, como
"ab{2}": corresponde a um a seguido por dois b (não menos) ("abb ")
; ": pelo menos dois b("abb", "abbbb", etc.);
"ab{3,5}": 2-5 b("abbb", "abbbb "ou "abbbbb").
Você também deve observe que você deve sempre especificar (ou seja, "{0,2}", não "{,2}"). Da mesma forma, você deve observar que '*', '+' e '?' seguindo três anotações de intervalo, "{0,}", "{1,}" e "{0,1}" respectivamente.
Agora coloque um certo número de caracteres entre parênteses, por exemplo:
"a(bc)*": corresponde a a seguido de 0 ou um "bc";
"a(bc){1,5}": um a 5 "bc. "
também possui um caractere '│', que é equivalente à operação OR:
"hi│hello": corresponde a uma string contendo "hi" ou "hello";
"(b│cd)ef": corresponde a uma string contendo "bef" Ou a string de "cdef";
"(a│b)*c": Corresponde a uma string contendo - múltiplos (incluindo 0) a ou b, seguido por uma string c
um ponto ('.' ) pode representar todos os caracteres únicos:
"a.[0-9]": um a seguido por um caractere seguido por um número (strings contendo tal string serão correspondidas e este colchete será omitido no futuro)
"^.{ 3}$": termina com três caracteres. O conteúdo entre colchetes corresponde apenas a um único caractere
"[ab]": corresponde a um único
caractere de '
a│b";a' a 'd' (mesmo efeito de "a│b│c│d" e "[abcd]");
"^[a-zA-Z]": Corresponde a caracteres começando com uma letra String
"[0-9 ]%": Corresponde a strings contendo x%
, "[a-zA-Z0-9]$": Corresponde a strings que terminam com uma vírgula seguida por um número ou letra.
Você também pode colocar os caracteres que não deseja entre colchetes . Você só precisa usar '^' como o início do colchete (ou seja, "%[^a-zA-Z]%" corresponde a dois sinais de porcentagem com um dentro de uma string que não seja de letras)
. interpretar, mas quando "^.[$()│*+?{" é usado como um caractere com significado especial, você deve adicionar '' na frente desses caracteres, e no php3 você deve evitar usar no início de o padrão. Por exemplo, a expressão regular "($│?[0-9]+" deve ser chamada ereg("( \$│?[0-9 ]+", $str) (não sei). saiba se é o mesmo no php4)
Não se esqueça que caracteres entre colchetes são uma exceção a esta regra - dentro de colchetes, todos os caracteres especiais, incluindo (''), perderão suas propriedades especiais (ou seja, "[* +?{}.]" corresponde a strings contendo esses caracteres). Além disso, como o manual regx nos diz: "Se a lista contiver ']', é melhor usá-lo como o primeiro caractere da lista. Um caractere (pode siga '^'). Se contiver '-', é melhor colocá-lo no início ou no final, ou no segundo ponto final de um intervalo (ou seja, [ad-0-9] O '-' no middle será válido.
Para ser completo, devo abordar sequências de agrupamento, classes de caracteres e classes de equivalência. Mas não quero entrar em muitos detalhes sobre esses aspectos, e eles não precisarão ser abordados no capítulo. Você pode encontrar mais informações nas páginas de manual do regex
Como construir um padrão para corresponder à entrada de um valor de moeda
. Agora vamos usar o que aprendemos para fazer algo útil: construir um padrão de correspondência para verificar se. a informação de entrada é um número que representa dinheiro. Achamos que existem quatro maneiras de representar a quantidade de dinheiro: "10.000,00" e "10.000,00", ou sem parte decimal, "10.000" e "10.000". Agora vamos começar a construir este padrão de correspondência:
^[1-9]["
.0 -9]*$
Isso significa que todas as variáveis devem começar com um número diferente de 0. Mas isso também significa que um único "0" não pode passar no teste. A solução é a seguinte:
^(0│[1-9] [0- 9]*)$
"Apenas 0 e números começando com 0 correspondem", também podemos permitir um sinal negativo antes do número:
^(0│-?[1-9][0-9]*)$
Isto é: "0 ou um número começando com 0 que pode ter um sinal negativo na frente dele." Ok, ok, agora vamos ser menos rigorosos e permitir começar com 0. Agora vamos eliminar o sinal negativo, porque estamos representando moedas. não há necessidade de usá-lo. Agora especificamos o padrão para corresponder à parte decimal:
^[0-9]+(.[0-9]+)?$
Isso implica que a string correspondente deve começar com pelo menos um árabe. digit . Mas observe que "10." não corresponde ao padrão acima, apenas "10" e "10.2" podem
. })?$
Especificamos acima que deve haver duas casas decimais após o ponto decimal. Se você acha que isso é muito severo, você pode alterá-lo para:
^[0-9]+(.[0-9]{1. ,2})? $
Isso permitirá um ou dois caracteres após o ponto decimal. Agora que adicionamos vírgulas para facilitar a leitura (cada terceiro dígito), podemos representá-lo assim:
^[0-9]{1,3}( ,[ 0-9]{3})*(.[0-9]{1,2})?$
Não se esqueça do sinal de mais '+' que pode ser substituído pelo sinal de multiplicação '*' se você deseja permitir que strings em branco sejam inseridas (Por quê?). Também não esqueça que a barra invertida '' pode causar erros em strings PHP (um erro muito comum Agora que podemos confirmar a string, iremos remover todas). vírgulas str_replace(" ,", "", $money) Em seguida, trate o tipo como double e podemos fazer cálculos matemáticos através dele
Construindo uma expressão regular para verificar e-mail
Vamos continuar a discutir como verificar um endereço de e-mail de forma completa. endereço de e-mail Existem três partes: nome de usuário POP3 (tudo à esquerda de '@' ), '@' , nome do servidor (essa é a parte restante O nome de usuário pode conter letras maiúsculas e minúsculas, algarismos arábicos, pontos ('. '), menos ('-') e sublinhado ('_'). Os nomes dos servidores também seguem esta regra, exceto o sublinhado.
Agora, os nomes de usuário não podem começar ou terminar com pontos. t tem dois. Deve haver pelo menos um caractere entre pontos consecutivos. Agora vamos dar uma olhada em como escrever um padrão de correspondência para o nome de usuário:
^[_a-zA-Z0-9-]+$
A existência de pontos é. ainda não é permitido. Vamos colocar isso Adicionar:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
O acima significa: "Comece com pelo menos um caractere canônico (exceto . acidental), seguido por 0 ou mais strings começando com um ponto. "
Para simplificar, podemos usar eregi() em vez de ereg(). eregi() não diferencia maiúsculas de minúsculas, portanto, não precisamos especificar. dois intervalos" az " e "AZ" - você só precisa especificar um:
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
O nome do servidor depois dele é o mesmo , mas o sublinhado deve ser removido:
^[a-z0-9-]+(.[a-z0-9-]+)*$
Feito. Agora é só usar "@" para conectar as duas partes:
^[_a. -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
Este é o completo modo de correspondência de autenticação de e-mail, só precisa chamar
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil)
para saber se é email.
Outros usos de expressões regulares
para extrair strings
ereg() e eregi() possuem um recurso que permite aos usuários extrair parte de uma string por meio de expressões regulares (você pode ler o manual para uso específico). uma string de caminho/URL Extraia nomes de arquivos – o código a seguir é o que você precisa:
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
Substituições avançadas
ereg_replace() e eregi_replace() também são muito úteis: Se quisermos substituir todos os sinais negativos separados por vírgulas:
ereg_replace("[ nrt]+" , "," , trim($str));