Índice Anterior Próxima

Metacaracteres tipo barra-letra

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

Os metacaracteres do tipo barra-letra são átomos representados por uma barra invertida \ seguida de uma letra qualquer, como \s e \W. Dependendo da letra, muda-se o significado desse metacaractere.

Contando que o alfabeto nos dá 26 letras e que maiúsculas são diferentes de minúsculas, duplicamos para 52 metacaracteres novos. Calma, nem todas as letras estão ocupadas... Ainda &:)

Tudo começou nas linguagens de programação com os printf da vida, que começaram a interpretar coisas, como \n e \t, para significar quebra de linha e TAB, pois visualmente é ambíguo se "1 2" é um, TAB, dois ou um, espaços, dois.

Exceto estes, havia outros barra-letra para representar aqueles caracteres de controle chatos que de vez em quando aparecem em nossa vida e são difíceis de ver e representar.

Essa representação simplificada e útil se tornou padrão e hoje a grande maioria dos aplicativos os entende. Eis a lista:

b-l	nome    	tradução
----------------------------------------------------
\a	alert   	alerta (bipe)
\b	backspace	caractere Backspace
\e	escape  	caractere Esc
\f	form feed	alimentação
\n	newline 	linha nova
\r	carriage ret	retorno de carro
\t	htab    	tabulação horizontal
\v	vtab    	tabulação vertical

Como esses barra-letras também poderiam ser muito úteis para escrever nossas expressões regulares, os robozinhos começaram a ter suporte a eles também, ou senão a linguagem recebe a ER como um dado do tipo string e os interpreta, passando ao robozinho seus valores literais. Mais detalhes sobre isso no tópico "ERs Pré-Processadas e Cruas" adiante.

Ah! Note que o \b se confunde com a borda. Cada aplicativo trata essa exceção à sua maneira: ou só é válido dentro da lista, ou depende do contexto, ou...

Aí é aquela história: onde passa boi, passa boiada. Observaram bem as classes POSIX, com aquela representação extensa e feia, depois compararam com os barra-letra, que são curtos e charmosos e foi um estalo: criaram barra-letras novos para representar as classes mais utilizadas.

São como "apelidos", pois têm a mesma funcionalidade de seu equivalente POSIX, levando em conta a localização do sistema (acentuação), o que muito nos interessa.

b-l	POSIX equiv.	mnemônico
-------------------------------------------
\d	[[:digit:]]	dígito
\D	[^[:digit:]]	não-dígito
\w	[[:alnum:]_]	palavra
\W	[^[:alnum:]_]	não-palavra
\s	[[:space:]]	branco
\S	[^[:space:]]	não-branco
Geralmente um barra-LETRA é a negação de um barra-letra.

A grande diferença desses barra-letras para as classes POSIX, é que eles são válidos fora das listas.

Dependendo do aplicativo, eles são válidos dentro das listas também, bagunçando aquela regra que vimos de que dentro da lista todo mundo é normal. Dependendo também, o sublinhado faz parte ou não do \w.

Com os poderes barra-letrísticos recém-adquiridos, podemos diminuir nossa ER para casar o RG:

[0-9]\.[0-9]{3}\.[0-9]{3}-[0-9]
\d\.\d{3}\.\d{3}-\d

Mas aí, como já estava feita a festa e ainda sobravam muitas letras do alfabeto, começaram a aparecer barra-letras aleatórios. Segue uma coletânea misturada deles, encontrados apenas em alguns poucos aplicativos, então confirme antes de usá-los:

b-l	significado     	similar
-----------------------------------------------------
\a	alfabeto        	[[:alpha:]]
\A	não-alfabeto    	[^[:alpha:]]
\h	cabeça de palavra	[[:alpha]_]
\H	não-cabeça de palavra	[^[:alpha:]_]
\l	minúsculas      	[[:lower:]]
\L	não-minúsculas  	[^[:lower:]]
\u	maiúsculas      	[[:upper:]]
\U	não-maiúsculas  	[^[:upper:]]
\o	número octal    	[0-7]
\O	não-número octal	[^0-7]
\B	não-borda
\A	início do texto
\Z	fim do texto
\l	torna minúscula
\L	torna minúscula até \E
\u	torna maiúscula
\U	torna maiúscula até \E
\Q	escapa até \E
\E	fim da modificação
\G	fim do casamento anterior

Conclusão: agora lhe resta procurar na documentação de seu aplicativo, se os barra-letras são suportados, se sim, se pelo robozinho ou pela interpretação de strings, quais barra-letras, e se são válidos dentro e/ou fora das listas.

Nossa! Essa "padronização" das implementações de expressões regulares realmente impressiona...


Índice Anterior Próxima