Criando expressões regulares de uma maneira fácil
Recentemente encontrei um projeto muito bacana chamado VerbalExpressions que usa e abusa de fluent interfaces para construir expressões regulares, como é possivel notar, essa ideia já foi portada para diversas linguagens!
E como já existia um port para Python e para C++, decidi “portar” para Qt. Na verdade portar entre aspas, pois meu trabalho se resumiu a ”s/std::string/QString/g” fora outras pequenas mudanças e/ou otimizações, logo, os creditos são todos do autor do CppVerbalExpressions
Construir expressões regulares nem sempre é uma tarefa simples, exceto para aqueles que já leram o livro Expressões Regulares - Uma abordagem divertida, nesse caso ignore, pois você já está fera nisso ;)
Usando fluent inteterface esta árdua tarefa se resume numa versão “poética”, como veremos a seguir:
auto expression = QVerbalExpressions()
.searchOneLine()
.startOfLine()
.then("http")
.maybe("s")
.then("://")
.maybe("www.")
.anythingBut(" ")
.endOfLine();
qDebug() << expression; // ^(?:http)(?:s)?(?:://)(?:www.)?(?:[^ ]*)$
qDebug() << expression.test("https://www.google.com"); // true
Que resulta na seguinte expressão ^(?:http)(?:s)?(?:://)(?:www.)?(?:[^ ]*)$
, legal né?
O código fonte se encontra em QtVerbalExpressions.