Expressões regulares fáceis

Por Jean Hertel, 24/02/2017

php

Expressões regulares são muito comuns no mundo da programação. Todo programador do iniciante ao avançado já teve que escrever alguma ou tentar dar manutenção.

Confesso que sempre que preciso utilizar expressões regulares, seja para construir algo ou dar manutenção, eu me arrepio. Talvez isso aconteça porque eu entendo pouco o funcionando das expressões regulares. Talvez seja porque eu já vi expressões realmente grandes e complexas.

Dificilmente você irá passar a sua vida na programação sem utilizar as expressões regulares e, portanto, uma solução mais simples para escrevê-las é necessária. Se você fizer uma busca pela internet vai notar que existem diversos softwares para auxiliar no entendimento e escrita das expressões regulares, mas nenhum deles resolve um problema chave: manutenção do código.

Uma forma muito elegante de resolver este problema é utilizando uma biblioteca para a construção das expressões. Obviamente reverter uma expressão regular não é uma coisa simples, mas podemos melhorar muito a sua leitura se tivermos uma biblioteca que nos permite visualmente entender o que esta expressão faz.

Surge então o Flux, uma biblioteca que faz este trabalho árduo de construir as expressões e de manter o código fácil de dar manutenção.

Para instalar com o composer utilize o comando:

composer require selvinortiz/flux

Após ter instalado a dependência podemos utilizar da seguinte forma:

<?php
require __DIR__ . '/vendor/autoload.php';
$flux   = Flux::getInstance()
        ->startOfLine()
        ->find('http')
        ->maybe('s')
        ->then('://')
        ->maybe('www.')
        ->anythingBut('.')
        ->either('.co', '.com')
        ->ignoreCase()
        ->endOfLine();

Para ver a expressão gerada:

<?php
Helper::msg( $flux );

Você também pode testar a expressão regular diretamente com a biblioteca:

<?php
if($flux->match( "http://minhaUrl.com" )) {
    echo "Deu certo :)";
}

Site oficial da biblioteca: https://github.com/selvinortiz/flux