Provided by: manpages-pt_20040726-4_all bug

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)