*   >> Leitura Educação Artigos >> tech >> desenvolvimento web

Construir uma expressão regular na Php

PHP Expressões Regulares - Parte VI Introdução Muitos dos exemplos que se deparam são exemplos simples. Nesta seção, vamos olhar para dois exemplos que são mais exigentes. Antes de deixar esta parte da série, vamos falar sobre o que é chamado Retrocesso. Passos necessários para construir um Regex Estas são as etapas necessárias para construir um regex: * Especifique a tarefa em detalhe, * Divida o problema em partes menores, * Traduzir as pequenas peças em expressões regulares, * Combine as expressões regulares, * Otimize a final combinado regexes.

Dois Exemplos Exemplo 1 hexadecimal Código de Cores Verificar Especificar o Task em Detalhe Um exemplo de um código de cor hexadecimal é # 4C8. Outro exemplo é # 44CC88. * Um código hexadecimal começa com um hash, seguido por 3 números hexadecimais ou 6 números hexadecimais. * Os dígitos hexadecimais são: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F. * As letras hexadecimais pode estar em maiúscula ou minúscula. Quebrando o problema em menores Parts * Começa com um #.

* Ele é seguido por 3 números hexadecimais ou * 6 números hexadecimais * Não há personagem após os 3 ou 6 dígitos hexadecimais. Traduzindo-se em expressões regulares Há três peças pequenas acima. A primeira parte dá a regex: /^ # /A segunda parte dá a regex: /[0-9a-fA-F] {3} /A terceira parte dá a regex: /[0-9a-fA-F] { 6} /A última parte dá a regex: /$ /Combinando o Regexes Este é o regex combinado: /^ # ([0-9a-fA-F] {3} $) | ([0-9a-fA-F ] {6} $) /Nota do metacharacter alternativo, | para os três ou seis dígitos hexadecimais. Além disso, observe os parênteses que separam os grupos alternados.

Otimizando o Combined Regex Isto significa encurtar o regex combinado. Note-se que 0-9 é abreviado para \\ d. Assim, no regex combinado, nós mudamos as duas ocorrências de 0-9 para \\ d. A expressão regular optimizado é: /^ # ([\\ da-fA-F] {3} $) | ([\\ da-fA-F] {6} $) /Esta expressão é mais curto do que o de cima por dois caracteres. O código a seguir ilustra isso: $ subject = "# 44CC88"; if (preg_match ("/^ # ([\\ da-Fa-F] {3} $) | ([\\ da-Fa-F] {6} $) /", $ assunto)) echo "Matched". "Else echo" Não Matched ".

"?> Exemplo 2 Nome de Usuário Verificar Especificar o Task em Detalhe Suponha que temos um site onde os usuários tem que iniciar sessão. Nós podemos dizer ao usuário que seu nome deve conter letras em maiúscula ou minúscula e /ou dígitos de zero a nove e /ou o sublinhado, _. Também insistem que o nome não deve ser inferior a 3 caracteres ou maior que 18 caracteres. Neste exemplo, impuseram os detalhes de especificação.

Quebrando o problema em partes menores Um nome de login é composta por * letras do alfabeto em maiúscula ou minúscula entre 3 a 18 letras, inclusive, e /ou * dígitos de 0 a 9 entre 3 a 18 dígitos, inclusive, e /* ou o sublinhado entre 3 a 18 dígitos, inclusive. Isto significa, você pode ter até 18 caracteres de sublinhado para um nome. Vamos permitir que a simplicidade. * Devemos limitar a seqüência sujeito a 3 ou 6 caracteres.

Traduzindo-se em expressões regulares O regex para o primeiro ponto é: /^ [a-zA-Z] {} $ 3,18 /A regex para o segundo ponto é: /^ [0-9] {} $ 3,18 /A regex para o terceiro ponto é: /^ [_] {} $ 3,18 /O quarto ponto é inerente às expressões regulares acima. Combinando os Regexes Na seção quebra, os três pontos acima mencionados são combinados com a frase, "e /ou" Não há nenhuma maneira direta de fazer isso, então temos que deduzir isso. Este é o regex combinado: /^ [a-zA-Z0-9 _] {} $ 3,18 /Otimizando o Regex Combinada Isto significa encurtar o regex combinado.

Observe que a classe [a-zA-Z0-9_] é abreviado para \\ w. A regex otimizado é: /^ [\\ w] {} $ 3,18 /retrocesso Vimos como combinar alternativas usando o metacaractere alternância, |. Quando combinando alternativas, PHP usa um processo conhecido como retrocesso. Vou ilustrar isso com um exemplo. Considere a seguinte expressão: preg_match ("/(124 | 123) (46 | 4 | 45) /", "12345") vou explicar o retrocesso, explicando o funcionamento da expressão acima. Os passos seguintes explicam como PHP resolve essa expressão. A. Ela começa com o primeiro número na cadeia de assunto '1'. B.

Ele tenta a primeira alternativa no primeiro subpadrão '124'. C. Ele vê a correspondência de "1" seguido de "2". Que está tudo certo. D. Ele percebe que '4' na expressão regular não corresponde '3' na cadeia de assunto - que é um beco sem saída. Por isso, recua dois caracteres na seqüência assunto e pega a segunda alternativa no primeiro subpadrão '123'. E. Ele coincide com '1' seguido de '2' seguido de '3'. O primeiro subpadrão está satisfeito. F. Ela se move para a segunda subpadrão e escolhe a primeira alternativa '46'. G. Ele coincide com o '4' na seqüência de subpadrão. H.

No entanto, '6' na expressão regular não corresponde '5' na seqüência de subpadrão, de modo que é um beco sem saída. Ele recua um caractere na seqüência subpadrão e pega a segunda alternativa na segunda subpadrão '4'. '4' I. partidas. A segunda subpadrão está satisfeito. J. Estamos no fim do regex; acabamos! Temos correspondido '1234' fora da cadeia sendo usada "12345". Há duas coisas a notar sobre este processo.

Em primeiro lugar, a terceira alternativa na segunda subpadrão '45' também permite que um jogo, mas o processo parou antes de chegar à terceira alternativa - a uma dada posição de caracter, mais à esquerda conquistadas. Em segundo lugar, o processo foi capaz de começar uma partida na primeira posição do caractere da cadeia sendo '1'. Se não houvesse partidas na primeira posição, o PHP passar para a segunda posição de caractere '2' e tentar a partida novamente.

PHP desiste e declara "12345" = ~ /(124 | 123) (46 | 4 | 45) /, para ser falso, apenas quando todos os caminhos possíveis em todas as posições de caracteres possíveis se esgotaram. O x Modifier Detalhes Este modificador é usado, colocando x em caixa baixa mesmo ao lado da segunda barra do regex. Ou seja: /padrão /x Se este modificador é usado, caracteres whitespace no padrão são totalmente ignorado exceto quando escapado ou dentro de uma classe de caracteres, e caracteres entre um # unescaped fora de uma classe de caracteres eo próximo caractere de nova linha, inclusive, são também ignorado.

Vou ilustrar tudo isso. Diz caracteres whitespace no padrão são totalmente ignorado exceto quando escapado ou dentro de uma classe de caracteres. Considere a seqüência de assunto: $ subject = "Sou um homem sentado."; A expressão a seguir com o x modificador não produz uma partida. preg_match ("/homem sentado /x", $ assunto) Isso ocorre porque na expressão regular, o espaço único entre "homem" e "sentar" e "sentar" e "para baixo" não são reconhecidas, com a presença do x modificador. Se você remover estes espaços correspondentes no assunto, você terá um jogo, com o x modificador.

A seguir assunto irá produzir um jogo com o regex acima: $ subject = "Sou um mansittingdown."; Se você deseja que o assunto original e regex para corresponder, então você tem que escapar os espaços no regex. A expressão a seguir produz uma partida com o assunto original: preg_match ("/man \\ \\ sessão para baixo /x", $ assunto) Uma escapou espaço único é "\\". Vamos agora falar sobre o espaço em branco em uma classe de caracteres. Note-se que o espaço em branco é, na verdade [\\ \\ t \\ r \\ n \\ f], não só "\\". No entanto, vamos continuar a nossa ilustração usando "\\".

Nós usamos o mesmo assunto, que é: $ subject =; "Eu sou um homem sentado." Se queremos corresponder ao espaço em frente da sessão, seguido por "sentado", com o modificador x, então a nossa regex poderia ser; /[] Sentado /x Note que o espaço em branco na classe de caracteres não foi escapado. Ou seja, com o x modificador, espaço em branco dentro de uma classe de caracteres não escapou, enquanto espaço em branco fora da classe de personagem é escapado.

A expressão a seguir produz uma partida: preg_match ("/[] sentado /x", $ assunto) x Com o modificador, qualquer texto entre o caractere # e caractere de nova linha implícita ou explícita é ignorado. Um caractere de nova linha implícita é conseguido pressionando a tecla Enter quando você está digitando. Um caractere de nova linha explícita é feito digitando o caractere \\ n. Considere o seguinte código: $ subject = "Sou um homem sentado."; $ re = "/man \\ #COMMENT vai aqui sentado /x"; if (preg_match (re $, $ assunto)) echo "Matched". ".

"? "Else echo" Não Matched> O assunto é: $ subject = "Sou um homem sentado."; A regex é: $ re = "/man \\ #COMMENT vai aqui sentado /x"; Note a presença do caractere # eo caractere de nova linha implícita, obtido após a palavra "aqui" pressionando a tecla Enter. A partida será produzido. O sub seqüência que é, na verdade, correspondente é "homem sentado". No código a seguir, o caractere de nova linha é explícito, com \\ n. A partida também é produzido. $ subject = "Sou um homem sentado."; $ re = "/man \\ #COMMENT vai aqui \\ nsitting /x"; if (preg_match (re $, $ assunto)) echo "Matched".

"Else echo" Não Matched "."?>

Page   <<       [1] [2] [3] [4] >>
Copyright © 2008 - 2016 Leitura Educação Artigos,https://artigos.nmjjxx.com All rights reserved.