Dominando expressões regulares em PHP

| by Dennis Pallett | March 28, 2005
Que são expressões regulares?

Uma expressão regular é um teste padrão que possa combinar várias cordas de texto. Usando expressões regulares você pode encontrar (e para substituir) determinados testes padrões do texto, por exemplo “todas as palavras que começam com a letra A” ou “encontram somente números de telefone”. As expressões regulares são usadas frequentemente em classes do validation, porque são uma ferramenta realmente poderosa para verificar endereços do E-mail, números de telefone, endereços da rua, códigos de fecho de correr, e mais.

Neste tutorial eu mostrá-lo-ei como as expressões regulares trabalham em PHP, e dou-lhe uma introdução curta em escrever suas próprias expressões regulares. Eu dar-lhe-ei também diverso o exemplo as expressões regulares que são usadas frequentemente.

Expressões regulares em PHP

Usar o regex (expressões regulares) é realmente fácil em PHP, e lá é diversas funções que existem para fazer o regex que encontra e que substitui. Vamos começar com um achado simples do regex.

Ter um olhar na documentação da função do preg_match (http://php.net/preg_match). Como você pode ver da documentação, o preg_match é usado executar uma expressão regular. Neste caso nenhum substituir é feito, only um achado simples. Copy o código abaixo para dar-lhe um try.<? o exemplo de php//string$str = “vamos encontrar < bla > do material entre </bla> estes dois suportes precedentes”; /vamos executar regex$do = o preg_match (”/<bla> (. *) < /bla>/“, $str, $matches); /verificação se o regex fosse successfulif ($do = verdadeiro) {// combinou algo, mostra os htmlentities combinados do eco da corda ($matches [“0”]); // também como o texto entre os Tag ecoa o “<br/>”. $matches [“1”];} mais {// nenhum eco do fósforo “não poderia encontrar um fósforo”;}? >

Em seguida funcionando o código, é provavelmente uma idéia boa se eu fizer um funcionamento rápido com o código. Bàsicamente, o núcleo inteiro do código acima é a linha que contem o preg_match. O primeiro argumento é seu teste padrão do regex. Este é provavelmente o mais importante. Mais tarde sobre neste tutorial, eu explicarei algumas expressões regulares básicas, mas se você quiser realmente aprender a expressão regular então é a mais melhor se você olhar em Google para exemplos regulares específicos da expressão.

O segundo argumento é a corda sujeita. Eu suponho que não necessita nenhuma explicação. Finalmente, o terceiro argumento pode ser opcional, mas se você quiser começar o texto combinado, ou o texto entre algo, ele é uma idéia boa usá-la (apenas como eu a usei no exemplo).

A função do preg_match para depois que encontrou o primeiro fósforo. Se você quiser encontrar TODOS OS fósforos em uma corda, você necessita usar a função do preg_match_all (http://www.php.net/preg_match_all). Esse não trabalha consideravelmente muito mesmo, assim lá é nenhuma necessidade explicá-la separada.

Agora que nós tivemos encontrar, vamos fazer encontr-e-substituir, com a função do preg_replace (http://www.php.net/preg_replace). A função do preg_replace trabalha consideravelmente similar à função do preg_match, mas preferivelmente há um outro argumento para a corda da recolocação. Copy o código abaixo, e it.< funcionado? o exemplo de php//string$str = “vamos substituir o <bla>stuff between</bla> que o bla suporta”; /fazer o preg replace$result = preg_replace (”/<bla> (. *) < /bla>/“, “<bla>new stuff</bla>”, $str); htmlentities do eco ($result);? >

O resultado seria então a mesma corda, a não ser que dissesse agora “o material novo” entre os Tag do bla. Este é naturalmente apenas um exemplo simples, e umas recolocações mais avançadas podem ser feitas.

Você pode também usar chaves na corda da recolocação. Dizer que você quer ainda o texto entre os suportes, e adiciona apenas algo? Você usa os $1, os $2, as chaves etc. para aquelas. Por exemplo: <? o exemplo de php//string$str = “vamos substituir o <bla>stuff between</bla> que o bla suporta”; /fazer o preg replace$result = preg_replace (”/<bla> (. *) < /bla>/“, “material do <bla>new (o velho: $1) </bla>”, $str); htmlentities do eco ($result);? >

Isto imprimiria então “vamos substituir o material novo (o velho: material no meio) que o bla suporta”. $2 realizam-se para o segundo “trav-todo”, $3 para o third, etc.

Isso é sobre ele para expressões regulares. Parece muito difícil, mas uma vez que você agarra é extremamente fácil contudo uma das ferramentas as mais poderosas ao programar em PHP. Eu não posso contar o número das épocas que o regex me conservou das horas de funções difíceis do texto do coding.

Um exemplo

Que um tutorial bom seria sem alguns exemplos reais? Let primeiramente ter um olhar em uma função simples do validation do E-mail. Um endereço do E-mail deve começar com letras ou os números, têm então @, então um domínio, terminando com uma extensão. O regex para aquele seria qualquer outra coisa semelhante: ^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$

Deixar-me rapidamente explicar esse regex. Bàsicamente, a primeira parte diz que deve todo ser letras ou números. Então nós começamos @, e em seguida aquele lá deve ser letras e/ou números outra vez (o domínio). Finalmente nós verificamos por um período, e então para ver se há uma extensão. O código para usar este regex olha como este: <? php//bom e-mail$good = “john@example.com”; /mau e-mail$bad = “blabla@blabla”; /vamos verificar o e-mailif bom (preg_match (”/^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$/“, $good)) {eco “E-mail válido”;} mais {eco “E-mail inválido”;}eco “<br/>”; /e verificar o e-mailif mau (preg_match (”/^ [a-zA-Z0-9_ . -] + de +@ [a-zA-Z0-9 -] . [a-zA-Z0-9 - .]+$/“, $bad)) {eco “E-mail válido”;} mais {eco “E-mail inválido”;}? >

O resultado deste seria “E-mail válido. E-mail inválido”, naturalmente. Nós verificamos apenas se um endereço do E-mail fosse válido. Se você envolver o código acima em uma função, você começou-se yourself uma função do validation do E-mail. Manter na mente though que o regex não é perfeito: apesar de tudo, não verifica se a extensão esteja demasiado longa, ele? Porque eu quero manter este short tutorial, eu não darei o regex desenvolvido, mas você pode encontrá-lo fàcilmente através de Google.

Um outro exemplo

Um outro exemplo grande seria um número de telefone. Palavra que você quer verificar que números de telefone e para se certificar eles estava no formato correto. Vamos supor que você quer os números estar no formato do xxx-xxxxxxx. O código olharia qualquer outra coisa semelhante: <? php//bom number$good = “123-4567890”; /mau number$bad = “45-3423423”; /vamos para verificar bom numberif (preg_match (”/ d {3} - d {7}/“, $good)) {eco “número válido”;} mais {eco “número inválido”;}eco “<br/>”; /e verificam mau numberif (preg_match (”/ d {3} - d {7}/“, $bad)) {eco “número válido”;} mais {eco “número inválido”;}? >

O regex é razoavelmente simples, porque nós se usam D. Isto significa bàsicamente o “fósforo todo o dígito” com o comprimento atrás dele. Neste exemplo procura primeiramente 3 dígitos, então “-” (hífen) e finalmente 7 dígitos. Trabalha perfeitamente, e faz exatamente o que nós queremos.

Que é exatamente possível com expressões regulares?

As expressões regulares são realmente outra uma das ferramentas as mais poderosas em PHP, ou toda a língua para essa matéria (você pode a usar em suas réguas do mod_rewrite também!). Há tanto você pode fazer com regex, e nós riscamos somente a superfície neste tutorial com alguns exemplos muito básicos.

Se você quiser realmente me escavar no regex sugeri-lo busca em Google para mais tutorials, e tentativa para aprender a sintaxe do regex. Não é fácil, e há completamente uma curva de aprendizagem íngreme (em minha opinião), mas a mais melhor maneira aprender é atravessar muitos dos exemplos, e tenta traduzi-los no inglês liso. Realmente ajudas você aprende a sintaxe.

No futuro eu dedicarei um artigo completo estritamente aos exemplos, including os mais avançados, sem nenhuma explanação. Mas para agora, eu posso somente dar-lhe as ligações a outros tutorials:

O Tutorial minucioso de 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)

Regular-Expressions.info (http://www.regular-expressions.info/)

Article Source: http://www.articleset.com



About the Author

Dennis Pallett is a young tech writer, with much experience in ASP, PHP and other web technologies. He enjoys writing, and has written several articles and tutorials. To find more of his work, look at his websites at http://www.phpit.net, http://www.aspit.net and http://www.ezfaqs.com. » Read more articles by Dennis Pallett
You are welcome to publish or reprint this article free of charge, provided: