Provided by:
manpages-pt_20040726-4_all 
NOME
regex - expressoes regulares do POSIX 1003.2
DESCRI,C~AO
Expressoes regulares (ERs), como definidas no POSIX 1003.2, vem em duas
formas: REs modernas (grosseiramente, aquelas de egrep; o 1003.2 chama
essas de ERs "estendidas" ERs) e ERs obsoletas (grosseiramente, aquelas
de ed(1); REs "basicas" do 1003.2). REs obsoletas existem
principalmente por causa de compatibilidade retrograda em alguns
programas antigos; eles serao discutidos no final. O 1003.2 deixa
alguns aspectos da sintaxe e da semantica das ERs em aberto; portaveis
para outras implementacoes do 1003.2.
Uma (moderna) ER e uma- ou mais- ramifica,c~oes- nao-vazias- , separadas
por '|'. Ele encontra tudo o que casa com uma das ramificacoes.
Uma ramificacao e um- ou mais peda,cos, concatenados. Ele encontra um
casamento para o primeiro, seguido por um casamento para o segundo,
etc.
Um pedaco e um 'atomo possivelmente seguido por um - '*', '+', Um atomo
seguido por '*' encontra uma sequencia de 0 ou mais casamentos do
atomo. Um atomo seguido por '+' encontra uma sequencia de 1 ou mais
casamentos do atomo. Um atomo seguido por '?' encontra uma sequencia
de 0 ou 1 casamento do atomo.
Uma composicao e '{' 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-) inclusive, e se houver dois deles, o
primeiro e nao pode exceder o segundo. Um atomo seguido por uma
composicao contendo um inteiro i, sem virgula, encontra uma sequencia
de i ou mais casamentos do atomo. Um atomo seguido por uma composicao
contendo dois inteiros i encontra uma sequencia de um mais i casamentos
do atomo. Um atomo seguido por uma composicao contendo dois inteiros i
e j encontra uma sequencia de i ate j (inclusive) casamentos do atomo.
Um atomo e uma expressao regular englobada em '()' (encontrando um
casamento para a expressao regular), um conjunto vazio de '()'
(encontrando a string nula)-, uma express~ao agrupada (ver abaixo), '.'
(encontrando qualquer caractere simples), '^' (encontrando a string
nula no comeco de uma linha), '$' (encontrando a string nula no fim de
uma linha), um '\' seguido de um dos caracteres (encontrando aquele
caractere tomado como um caractere ordinario), um '\' seguido por
qualquer outro caractere- (encontrando aquele caractere tomado como um
caractere ordinario, como se o '\' nao estivesse presente-), ou um
caractere simples se outro significado (encontrando qualquer
caractere). Um '{' seguido por um caractere diferente de um digito e
um caractere ordinario, nao o inicio de uma composicao-. E ilegal
terminar uma ER com '\'.
Uma express~ao agrupada e uma lista de caracteres englobados por um
'[]'. Ele normalmente encontra qualquer caractere simples da lista
(mas veja abaixo). Se a lista comeca com '^', ele encontra qualquer
caractere simples (mas veja abaixo) que nao venha do resto da lista.
Se dois caracteres na lista sao separados por '-', isto e uma
abreviacao para a range completa de caracteres entre aqueles dois
(inclusive) na sequencia de combinacao, por exemplo, '[0-9]' em ASCII
encontra qualquer digito decimal. E ilegal - que duas faixas
compartilhem um ponto final, por exemplo, 'a-c-e'. As faixas sao muito
dependentes de sequencia de combinacao, e programas portaveis devem
evitar confiar nelas.
Para incluir um literal ']' na lista, torne-o o primeiro caractere
(seguindo um possivel '^'). Para incluir um literal '-', torne-o o
primeiro ou o ultimo caractere, ou o segundo ponto final da faixa.
Para usar um literal '-' como o primeiro ponto final da faixa, englobe-
o entre '[.' e '.]' para torna-lo um elemento de combinacao (veja
abaixo). Com a excecao destas e algumas combinacoes usando '[' (veja
os proximos paragrafos), todos os outros caracteres especiais,
incluindo '\', perdem seu significado especial dentro de uma expressao
agrupada.
Dentro de uma expressao agrupada, um elemento de combinacao (um
caractere, uma sequencia multi-caractere que combina como se fosse um
caractere simples, ou um nome de sequencia de combinacao se for o caso)
englobado entre '[.' e '.]' significa a sequencia de caracteres daquele
elemento de combinacao. A sequencia e um elemento simples de uma lista
de expressoes agrupada. Uma expressao agrupada contendo um elemento de
combinacao multi-caractere pode, portanto, encontrar mais de um
caractere, por exemplo, se a sequencia de combinacao inclui um elemento
de combinacao 'ch', entao a ER '[[.ch.]]*c' encontra os primeiros cinco
caracteres de 'chchcc'.
Dentro de uma expressao agrupada, um elemento de combinacao englobado
por '[=' e '=]' e uma classe equivalente, que significa uma sequencia
de caracteres com todos os elementos de combinacao equivalentes a
aquele, incluindo ele mesmo. (Se nao houver outro elemento de
combinacao equivalente, o tratamento e como se os delimitadores fossem
'[.' e '.]'.) Por exemplo, se o e ^ sao os membros de uma classe
equivalente, entao '[[=o=]]', '[[=^=]]', e '[o^]' sao todos sinonimos.
Uma classe equivalente nao pode - ser um ponto final de uma faixa.
Dentro de uma expressao agrupada, o nome de uma classe de caractere
englobado por '[:' e ':]' significa a lista de todos os caracteres
pertencente aquela classe. Os nomes padrao de classes de caracteres
sao:
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
Isto vale para as classes de caracteres definidas em ctype(3). Um
locale pode fornecer outros. Uma classe de caracteres nao pode ser
usada como um ponto final de uma faixa.
Ha dois casos especiais de expressoes de colchetes: as expressoes
'[[:<:]]' e '[[:>:]]' casam com a string nula no inicio e no fim de uma
palavra, respectivamente. Uma palavra e definida como uma sequencia de
caracteres de palavras que nao e precedida e nem seguida por caracteres
de palavra. Um caractere de palavra e um caractere alnum (como
definido por ctype(3)) ou um sublinhado. Esta e uma extensao,
compativel mas nao especifica do POSIX 1003.2, e deve ser usada com
cautela em softwares que pretendem ser portaveis para outros sistemas.
Em um evento em que uma ER encontraria mais de uma substring de uma
string dada, a ER encontra aquela que inicia mais proxima do inicio da
string. Se a ER pode encontrar mais que uma substring comecando
naquele ponto, ela encontra a mais longa. Sub-expressoes tambem podem
encontrar a substring mais longa possivel, sujeitando-se a limitacao de
o casamento todo ser tao longo quanto possivel, com sub-expressoes
iniciando primeiro na ER tendo prioridade sobre aquelas iniciando
posteriormente. Note que sub-expressoes de nivel mais alto, portanto,
tem prioridade sobre suas sub-expressoes componentes de nivel mais
baixo.
Os comprimentos dos casamentos sao medidos em caracteres, e nao em
elementos de combinacao. Uma string nula e considerada mais longa do
que um caso de nao se encontrar nada. Por exemplo, quando '(.*).*' e
aplicado em 'abc' a sub-expressao entre parenteses casa todos os tres
caracteres, e quando '(a*)*' e aplicado em 'bc' ambas as ERs inteiras e
a sub-expressao entre parenteses encontram a string nula.
Se casamento independente da caixa e especificado, o efeito e tal como
se todas as distincoes de caixa sumissem do alfabeto. Quando um
alfabetico que existe em multiplos casos aparece como um caractere
ordinario fora de uma expressao de colchete, e transformado
efetivamente em uma expressao de colchetes contendo ambos os casos, por
exemplo, 'x' se torna '[^xX]'. Quando ele aparece dentro de uma
expressao de colchetes, todos os casos equivalentes a ele sao
acrescentados a expressao de colchetes, de forma que (por exemplo)
'[x]' se torna '[xX]' e '[^xX]'.
Nenhum limite particular e imposto sobre o comprimento das ERs-.
Programas que pretendem ser portaveis nao devem empregar ERs maiores de
256 bytes, pois uma implementacao pode negar-se a aceitar tais ERs para
continuar compativel com o POSIX.
Expressoes regulares obsoletas ("basicas") diferem em varios aspectos.
Os sinais '+', '|' e '?' sao caracteres ordinarios e nao ha
equivalentes para suas funcionalidades. Os delimitadores para
composicao sao '\{' and '\}', com '{' e '}' por eles mesmos caracteres
ordinarios. Os parenteses para sub-expressoes aninhadas sao '\(' e
'\)', com '(' e ')', por eles mesmos caracteres ordinarios. O '^' e um
caractere ordinario, exceto no comeco de uma ER ou - no comeco de uma
sub-expressao com parenteses, o '$' e um caractere ordinario, exceto no
fim da ER ou - no fim da sub-expressao com parenteses, e '*' e um
caractere ordinario se ele aparece no comeco da ER ou no comeco de uma
sub-expressao com parenteses (depois de um possivel '^' dianteiro).
Finalmente, ha um novo tipo de atomo, uma refer^encia para tr'as: casa
com a mesma sequencia de caracteres casada pela sub-expressao de
parenteses (numerando sub-expressoes pelas posicoes dos seus parenteses
abertos, da esquerda para a direita), tal que (por exemplo)
'\([bc]\)\1' case com 'bb' ou 'cc', mas nao com 'bc'.
VEJA TAMB'EM
regex(3)
POSIX 1003.2, secao 2.8 (Notacao de Expressao Regular).
PROBLEMAS
Ter dois tipos de ERs e uma devastacao.
A especificacao corrente do 1003.2 diz que ')' e um caractere ordinario
na ausencia de um '(' nao casado; este era um resultado nao-intencional
de um erro de palavreamento, e mudancas sao parecidas. Evite confiar
nela.
Referencias para tras sao uma destruicao terrivel, causando problemas
serios em implementacoes eficientes. Elas tambem sao definidas um
pouco vagamente (fazendo Evite usa-las.
A especificacao 1003.2 para casamentos independentes de caixa e vaga.
A definicao "um caso implica em todos os casos" dada acima e um
consenso corrente entre implementadores como a interpretacao correta.
A sintaxe para os limites de palavra e incrivelmente feia.
AUTOR
Esta pagina foi tomada do pacote regex de Henry Spencer.
TRADUZIDO POR LDP-BR em 21/08/2000.
Rubens de Jesus Nogueira <darkseid99@usa.net> (traducao) Andre L.
Fassone Canova <lonelywolf@blv.com.br> (revisao)
07/02/1994 REGEX(7)