Índice Anterior Próxima

Multilinha

Está gostando da leitura? Está aprendendo? Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!

Algumas linguagens possuem modificadores para que sua ER consiga lidar com um texto de várias linhas. Geralmente são dois os modificadores, um para tratar estas várias linhas como apenas uma, em que o metacaractere ponto também casa o \n (quebra de linha), e outra complementar para tratar como várias linhas, onde o circunflexo e o cifrão podem casar começo e final de qualquer uma dessas linhas contidas no texto, chamado multilinha. Vejamos:

$a = $b = $c = "linha 1\nlinha 2\nlinha 3";
$a =~ s/^.*/!!/g ; print "$a\n-------\n";
$b =~ s/^.*/!!/gs; print "$b\n-------\n";
$c =~ s/^.*/!!/gm; print "$c\n-------\n";

# RESULTADO (normal, uma linha, multilinha)

!!
linha 2
linha 3
-------
!!
-------
!!
!!
!!
-------

Ah, nada como um exemplo para ilustrar conceitos... Esse trecho em Perl casa a ER ^.* no texto de três linhas, fazendo substituições globais (modificador g), primeiro normal, depois com o modificador uma linha, e depois o multilinha.

Como era de se esperar, o primeiro, como não sabe o que é multilinha casou apenas a primeira e não tocou nas outras linhas.

O segundo, como o ponto casa a quebra de linha, considerou o texto todo como apenas uma única linha e casou tudo, trocando todas por apenas um !!.

Já o último, que é multilinha, considerou o \n o fim de uma linha e casou as três linhas separadamente.


Índice Anterior Próxima