Uma expressão regular (ER ou regexp) é um padrão que denota um conjunto de caracteres. As expressões regulares são tradicionalente usadas para selecionar e alterar textos. A correspondência de uma ER com um determinado texto pode resultar em sucesso ou fracasso, que, dependendo das circunstâncias, é o resultado que se quer comparar.
Uma expressão regular especifica um conjunto de caracteres para comparação, algo como qualquer linha que comece com a e termine com b ou qualquer palavra que contenha três ou quatro a's juntos e assim por diante. Estes padrões caracterizam a classe de comparação das expressões regulares. Veremos como representá-los por conjuntos de caracteres.
Expressões regulares são usadas por muitos aplicativos UNIX, como grep, sed, awk, vi, emacs, perl e outros. A maioria destes aplicativos possui o seu próprio conjunto de códigos para representar as ER, mas a maioria deles são comuns entre todos. A tabela mostra as classes mais comuns de expressões regulares.
As expressões regulares formam entidades tão genéricas que devem ser previamente testadas para evitar efeitos colaterais. As ER representam um valioso recurso de trabalho. Além de sua generalidade, estão disponíveis em grande parte dos aplicativos do UNIX. Observe os exemplos que seguem.
Por exemplo, a ER ab*c significa a seguido por zero ou mais (*) b's e um c. Coincidiria com ac, abc, abbc, abbbc e assim por diante. Já ab+c não representaria ac, mas abc, abbc, abbbc sim. Os caracteres *, +, ., ? são chamados de multiplicadores nas expressões regulares. Outra construção comum dos multiplicadores é .* que significa uma seqüência de qualquer tamanho e qualquer caracter.
Se colocamos o circunflexo no início da ER, como em Âncora, estamos coincidindo a ER com uma linha que começa com esta palavra, mas nenhuma outra. Já colocando um $ no fim da linha, como em fim da linha$, restinge-se a RE a terminar com fim da linha. Assim, na ER tudo$ a linha só poderá conter o que tiver entre o e $. Por restringir o início e fim da ER, e $ são chamados de âncoras.
Como as expressões regulares estão na maioria dos aplicativos de respeito no UNIX, convém conferir as pequenas variações entre os especificadores de um e outro. Alguns aplicativos expandem a lista de especificadores enquanto outros apresentam pequenas variações. Além disso, existem situações em que os caracteres de classe das ER precisam ser mascarados, via caracter de fuga , para que sejam corretamente interpretados pelo aplicativo. Consulte o manual do aplicativo em questão (man page) e a página 7 do manual regex, digitando man 7 regex.
leon 2008-08-19