1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
|
.\" -*- nroff -*-
.\" From Henry Spencer's regex package (as found in the apache
.\" distribution). The package carries the following copyright:
.\"
.\" Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
.\" This software is not subject to any license of the American Telephone
.\" and Telegraph Company or of the Regents of the University of California.
.\"
.\" Permission is granted to anyone to use this software for any purpose
.\" on any computer system, and to alter it and redistribute it, subject
.\" to the following restrictions:
.\"
.\" 1. The author is not responsible for the consequences of use of this
.\" software, no matter how awful, even if they arise from flaws in it.
.\"
.\" 2. The origin of this software must not be misrepresented, either by
.\" explicit claim or by omission. Since few users ever read sources,
.\" credits must appear in the documentation.
.\"
.\" 3. Altered versions must be plainly marked as such, and must not be
.\" misrepresented as being the original software. Since few users
.\" ever read sources, credits must appear in the documentation.
.\"
.\" 4. This notice may not be removed or altered.
.\"
.\" In order to comply with `credits must appear in the documentation'
.\" I added an AUTHOR paragraph below - aeb.
.\"
.TH REGEX 7 "07/02/1994"
.SH NOME
regex \- expresses regulares do POSIX 1003.2
.SH DESCRIO
Expresses regulares (ERs),
como definidas no POSIX 1003.2, vm em duas formas:
REs modernas (grosseiramente, aquelas de
.IR egrep ;
o 1003.2 chama essas de ERs "estendidas" ERs) e ERs obsoletas
(grosseiramente, aquelas de
.BR ed (1);
REs "bsicas" do 1003.2).
REs obsoletas existem principalmente por causa de compatibilidade retrgrada em alguns programas antigos;
eles sero discutidos no final. O
1003.2 deixa alguns aspectos da sintaxe e da semntica das ERs em aberto;
'\(dg' marca decises nesses aspectos que no podem ser totalmente
portveis para outras implementaes do 1003.2.
.PP
Uma (moderna) ER uma\(dg ou mais\(dg \fIramificaes\fR\(dg
no-vazias\(dg , separadas por '|'.
Ele encontra tudo o que casa com uma das ramificaes.
.PP
Uma ramificao um\(dg ou mais \fIpedaos\fR, concatenados.
Ele encontra um casamento para o primeiro, seguido por um casamento para o segundo, etc.
.PP
Um pedao um \fItomo\fR possivelmente seguido por um \(dg '*', '+',
'?', simples ou composto.
Um tomo seguido por '*' encontra uma sequncia de 0 ou mais casamentos do tomo.
Um tomo seguido por '+' encontra uma sequncia de 1 ou mais casamentos do tomo.
Um tomo seguido por '?' encontra uma sequncia de 0 ou 1 casamento do tomo.
.PP
Uma composio '{' seguido por um inteiro decimal sem sinal,
possivelmente seguido por ','
, possivelmente seguido por outro inteiro
decimal sem sinal, sempre seguido por '}'.
Os inteiros devem estar entre 0 e RE_DUP_MAX (255\(dg) inclusive,
e se houver dois deles, o primeiro e no pode exceder o segundo.
Um tomo seguido por uma composio contendo um inteiro \fIi\fR,
sem vrgula, encontra uma
sequncia de \fIi\fR ou mais casamentos do tomo.
Um tomo seguido por uma composio
contendo dois inteiros \fIi\fR encontra
uma sequencia de um mais \fIi\fR casamentos do tomo.
Um tomo seguido por uma composio
contendo dois inteiros \fIi\fR e \fIj\fR encontra
uma sequncia de \fIi\fR at \fIj\fR (inclusive) casamentos do tomo.
.PP
Um tomo uma expresso regular englobada em '()' (encontrando um casamento
para a expresso regular),
um conjunto vazio de '()' (encontrando a string nula)\(dg,
uma \fIexpresso agrupada\fR (ver abaixo), '.'
(encontrando qualquer caractere simples), '^' (encontrando a string nula no
comeo de uma linha), '$' (encontrando a string nula no
fim de uma linha), um '\e' seguido de um dos caracteres
'^.[$()|*+?{\e'
(encontrando aquele caractere tomado como um caractere ordinrio),
um '\e' seguido por qualquer outro caractere\(dg
(encontrando aquele caractere tomado como um caractere ordinrio,
como se o '\e' no estivesse presente\(dg),
ou um caractere simples se outro significado (encontrando qualquer caractere).
Um '{' seguido por um caractere diferente de um dgito um caractere
ordinrio, no o incio de uma composio\(dg.
ilegal terminar uma ER com '\e'.
.PP
Uma \fIexpresso agrupada\fR uma lista de caracteres englobados por um '[]'.
Ele normalmente encontra qualquer caractere simples da lista (mas veja abaixo).
Se a lista comea com '^',
ele encontra qualquer caractere simples
(mas veja abaixo) que no venha do resto da lista.
Se dois caracteres na lista so separados por '\-', isto uma abreviao
para a \fIrange\fR completa de caracteres entre aqueles dois (inclusive) na
sequncia de combinao,
por exemplo, '[0-9]' em ASCII encontra qualquer dgito decimal.
ilegal \(dg que duas faixas compartilhem um
ponto final, por exemplo, 'a-c-e'.
As faixas so muito dependentes de sequncia de combinao,
e programas portveis devem evitar confiar nelas.
.PP
Para incluir um literal ']' na lista, torne-o o primeiro caractere
(seguindo um possvel '^').
Para incluir um literal '\-', torne-o o primeiro ou o ltimo caractere,
ou o segundo ponto final da faixa.
Para usar um literal '\-' como o primeiro ponto final da faixa,
englobe-o entre '[.' e '.]' para torn-lo um elemento de combinao (veja abaixo).
Com a exceo destas e algumas combinaes usando '[' (veja os prximos
pargrafos), todos os outros caracteres especiais, incluindo '\e', perdem seu
significado especial dentro de uma expresso agrupada.
.PP
Dentro de uma expresso agrupada, um elemento de combinao (um caractere,
uma sequncia multi-caractere que combina como se fosse um caractere simples,
ou um nome de sequncia de combinao se for o caso)
englobado entre '[.' e '.]' significa a
sequncia de caracteres daquele elemento de combinao.
A sequncia um elemento simples de uma lista de expresses agrupada.
Uma expresso agrupada contendo um elemento de combinao multi-caractere
pode, portanto, encontrar mais de um caractere,
por exemplo, se a sequncia de combinao inclui um elemento de combinao 'ch',
ento a ER '[[.ch.]]*c' encontra os primeiros cinco caracteres
de 'chchcc'.
.PP
Dentro de uma expresso agrupada, um elemento de combinao englobado por '[='
e '=]' uma classe equivalente, que significa uma sequncia de caracteres
com todos os elementos de combinao equivalentes a aquele, incluindo ele mesmo.
(Se no houver outro elemento de combinao equivalente,
o tratamento como se os delimitadores fossem '[.' e '.]'.)
Por exemplo, se o e \o'o^' so os membros de uma classe equivalente,
ento '[[=o=]]', '[[=\o'o^'=]]', e '[o\o'o^']' so todos sinnimos.
Uma classe equivalente no pode \(dg ser um ponto final
de uma faixa.
.PP
Dentro de uma expresso agrupada, o nome de uma \fIclasse de caractere\fR englobado
por '[:' e ':]' significa a lista de todos os caracteres pertencente quela
classe.
Os nomes padro de classes de caracteres so:
.PP
.RS
.nf
.ta 3c 6c 9c
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
.fi
.RE
.PP
Isto vale para as classes de caracteres definidas em
.BR ctype (3).
Um locale pode fornecer outros.
Uma classe de caracteres no pode ser usada como um ponto final de uma faixa.
.PP
H dois casos especiais de expresses de colchetes:
as expresses '[[:<:]]' e '[[:>:]]' casam com a string nula no
incio e no fim de uma palavra, respectivamente.
Uma palavra definida como uma sequncia de
caracteres de palavras
que no precedida e nem seguida por
caracteres de palavra.
Um caractere de palavra um caractere
.I alnum
(como definido por
.BR ctype (3))
ou um sublinhado.
Esta uma extenso,
compatvel mas no especfica do POSIX 1003.2,
e deve ser usada com
cautela em softwares que pretendem ser portveis para outros sistemas.
.PP
Em um evento em que uma ER encontraria mais de uma substring de uma string
dada,
a ER encontra aquela que inicia mais prxima do incio da string.
Se a ER pode encontrar mais que uma substring comeando naquele ponto,
ela encontra a mais longa.
Sub-expresses tambm podem encontrar a substring mais longa possvel, sujeitando-se
limitao de o casamento todo ser to longo quanto possvel,
com sub-expresses iniciando primeiro na ER tendo prioridade sobre
aquelas iniciando posteriormente.
Note que sub-expresses de nvel mais alto, portanto, tm prioridade sobre
suas sub-expresses componentes de nvel mais baixo.
.PP
Os comprimentos dos casamentos so medidos em caracteres, e no em elementos de combinao.
Uma string nula considerada mais longa do que um caso de no se encontrar nada.
Por exemplo,
'bb*' encontra os trs caracteres centrais de 'abbbc',
'(wee|week)(knights|nights)' casa todos os dez caracteres de 'weeknights',
quando '(.*).*' aplicado em 'abc' a sub-expresso entre parnteses
casa todos os trs caracteres, e
quando '(a*)*' aplicado em 'bc' ambas as ERs inteiras e a sub-expresso
entre parnteses encontram a string nula.
.PP
Se casamento independente da caixa especificado,
o efeito tal como se todas as distines de caixa sumissem do
alfabeto.
Quando um alfabtico que existe em mltiplos casos aparece como um
caractere ordinrio fora de uma expresso de colchete, transformado
efetivamente em uma expresso de colchetes contendo ambos os casos,
por exemplo, 'x' se torna '[^xX]'.
Quando ele aparece dentro de uma expresso de colchetes, todos os casos
equivalentes a ele so acrescentados expresso de colchetes, de forma que (por exemplo) '[x]'
se torna '[xX]' e '[^xX]'.
.PP
Nenhum limite particular imposto sobre o comprimento das ERs\(dg.
Programas que pretendem ser portveis no devem empregar ERs
maiores de 256 bytes,
pois uma implementao pode negar-se a aceitar tais ERs para continuar
compatvel com o POSIX.
.PP
Expresses regulares obsoletas ("bsicas") diferem em vrios aspectos.
Os sinais '+', '|' e '?' so caracteres ordinrios e no h equivalentes
para suas funcionalidades.
Os delimitadores para composio so '\e{' and '\e}',
com '{' e '}' por eles mesmos caracteres ordinrios.
Os parnteses para sub-expresses aninhadas so '\e(' e '\e)',
com '(' e ')', por eles mesmos caracteres ordinrios.
O '^' um caractere ordinrio, exceto no comeo de uma
ER ou \(dg no comeo de uma sub-expresso com parnteses,
o '$' um caractere ordinrio, exceto no fim da
ER ou \(dg no fim da sub-expresso com parnteses,
e '*' um caractere ordinrio se ele aparece no comeo da
ER ou no comeo de uma sub-expresso com parnteses
(depois de um possvel '^' dianteiro).
Finalmente, h um novo tipo de tomo, uma \fIreferncia para trs\fR:
'\e' seguido por um dgito decimal diferente de zero \fId\fR
casa com a mesma sequncia de caracteres
casada pela sub-expresso de parnteses
(numerando sub-expresses pelas posies dos seus parnteses abertos,
da esquerda para a direita),
tal que (por exemplo) '\e([bc]\e)\e1' case com 'bb' ou 'cc', mas no com 'bc'.
.SH "VEJA TAMBM"
.BR regex (3)
.PP
POSIX 1003.2, seo 2.8 (Notao de Expresso Regular).
.SH PROBLEMAS
Ter dois tipos de ERs uma devastao.
.PP
A especificao corrente do 1003.2 diz que ')' um caractere ordinrio
na ausncia de um '(' no casado;
este era um resultado no-intencional de um erro de palavreamento,
e mudanas so parecidas.
Evite confiar nela.
.PP
Referncias para trs so uma destruio terrvel,
causando problemas srios em implementaes eficientes.
Elas tambm so definidas um pouco vagamente
(fazendo
'a\e(\e(b\e)*\e2\e)*d' encontra 'abbbd'?).
Evite us-las.
.PP
A especificao 1003.2 para casamentos independentes de caixa vaga.
A definio "um caso implica em todos os casos" dada acima
um consenso corrente entre implementadores como a interpretao correta.
.PP
A sintaxe para os limites de palavra incrivelmente feia.
.SH AUTOR
Esta pgina foi tomada do pacote regex de Henry Spencer.
.SH TRADUZIDO POR LDP-BR em 21/08/2000.
\&\fR\&\f(CWRubens de Jesus Nogueira <darkseid99@usa.net> (traduo)\fR
\&\fR\&\f(CWAndr L. Fassone Canova <lonelywolf@blv.com.br> (reviso)\fR
|