Provided by: manpages-pt_20040726-4_all bug

NOME

       regex - expressões regulares do POSIX 1003.2

DESCRIÇÃO

       Expressões  regulares  (ERs),  como  definidas  no  POSIX  1003.2, vêm 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  "básicas"  do 1003.2).  REs
       obsoletas existem  principalmente  por  causa  de  compatibilidade  retrógrada  em  alguns
       programas  antigos;  eles  serão  discutidos  no  final. O 1003.2 deixa alguns aspectos da
       sintaxe e da semântica das ERs em aberto; portáveis para outras implementações do 1003.2.

       Uma (moderna) ER é uma† ou mais† ramificações†  não-vazias†  ,  separadas  por  '|'.   Ele
       encontra tudo o que casa com uma das ramificações.

       Uma  ramificação  é  um†  ou mais pedaços, concatenados.  Ele encontra um casamento para o
       primeiro, seguido por um casamento para o segundo, etc.

       Um pedaço é um átomo possivelmente seguido por um † '*', '+', Um  átomo  seguido  por  '*'
       encontra  uma  sequência  de  0  ou  mais  casamentos  do átomo.  Um átomo seguido por '+'
       encontra uma sequência de 1 ou mais  casamentos  do  átomo.   Um  átomo  seguido  por  '?'
       encontra uma sequência de 0 ou 1 casamento do átomo.

       Uma  composição  é '{' 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 não pode exceder o segundo.  Um átomo seguido por uma  composição  contendo  um
       inteiro i, sem vírgula, encontra uma sequência de i ou mais casamentos do átomo.  Um átomo
       seguido por uma composição contendo dois inteiros i encontra uma sequencia de  um  mais  i
       casamentos  do  átomo.   Um  átomo seguido por uma composição contendo dois inteiros i e j
       encontra uma sequência de i até j (inclusive) casamentos do átomo.

       Um átomo é uma expressão regular englobada  em  '()'  (encontrando  um  casamento  para  a
       expressão  regular), um conjunto vazio de '()' (encontrando a string nula)†, uma expressão
       agrupada (ver abaixo), '.'  (encontrando qualquer caractere simples), '^'  (encontrando  a
       string  nula no começo 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
       ordinário),  um  '\'  seguido  por qualquer outro caractere† (encontrando aquele caractere
       tomado como um caractere ordinário,  como  se  o  '\'  não  estivesse  presente†),  ou  um
       caractere  simples  se outro significado (encontrando qualquer caractere).  Um '{' seguido
       por um caractere diferente de um dígito é um caractere ordinário,  não  o  início  de  uma
       composição†.  É ilegal terminar uma ER com '\'.

       Uma  expressão agrupada é uma lista de caracteres englobados por um '[]'.  Ele normalmente
       encontra qualquer caractere simples da lista (mas veja abaixo).  Se  a  lista  começa  com
       '^',  ele  encontra qualquer caractere simples (mas veja abaixo) que não venha do resto da
       lista.  Se dois caracteres na lista são separados por '-', isto é uma  abreviação  para  a
       range  completa  de  caracteres entre aqueles dois (inclusive) na sequência de combinação,
       por exemplo, '[0-9]' em ASCII encontra qualquer dígito  decimal.   É  ilegal  †  que  duas
       faixas compartilhem um ponto final, por exemplo, 'a-c-e'.  As faixas são muito dependentes
       de sequência de combinação, e programas portáveis devem evitar confiar nelas.

       Para incluir um literal ']' na lista, torne-o o primeiro caractere (seguindo  um  possível
       '^').  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 combinação (veja abaixo).  Com a
       exceção destas e algumas combinações usando '[' (veja os próximos  parágrafos),  todos  os
       outros  caracteres especiais, incluindo '\', perdem seu significado especial dentro de uma
       expressão agrupada.

       Dentro de uma expressão agrupada, um elemento de combinação (um caractere,  uma  sequência
       multi-caractere que combina como se fosse um caractere simples, ou um nome de sequência de
       combinação se for o caso) englobado entre '[.' e '.]' significa a sequência de  caracteres
       daquele  elemento  de  combinação.   A  sequência  é  um  elemento simples de uma lista de
       expressões agrupada.  Uma expressão agrupada contendo um  elemento  de  combinação  multi-
       caractere  pode,  portanto, encontrar mais de um caractere, por exemplo, se a sequência de
       combinação inclui um elemento de combinação 'ch', então  a  ER  '[[.ch.]]*c'  encontra  os
       primeiros cinco caracteres de 'chchcc'.

       Dentro  de  uma  expressão agrupada, um elemento de combinação englobado por '[=' e '=]' é
       uma classe equivalente, que significa uma sequência de caracteres com todos  os  elementos
       de  combinação  equivalentes a aquele, incluindo ele mesmo.  (Se não houver outro elemento
       de combinação equivalente, o tratamento é como se os delimitadores fossem  '[.'  e  '.]'.)
       Por  exemplo,  se  o  e  ^  são  os  membros  de  uma classe equivalente, então '[[=o=]]',
       '[[=^=]]', e '[o^]' são todos sinônimos.  Uma classe equivalente não pode † ser  um  ponto
       final de uma faixa.

       Dentro  de  uma expressão agrupada, o nome de uma classe de caractere englobado por '[:' e
       ':]' significa a lista de todos os caracteres pertencente àquela classe.  Os nomes  padrão
       de classes de caracteres são:

              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 não pode ser usada como um ponto final de uma faixa.

       Há dois casos especiais de expressões de colchetes: as expressões  '[[:<:]]'  e  '[[:>:]]'
       casam com a string nula no início e no fim de uma palavra, respectivamente.  Uma palavra é
       definida como uma sequência de caracteres de palavras que não é precedida  e  nem  seguida
       por  caracteres  de  palavra.  Um caractere de palavra é um caractere alnum (como definido
       por ctype(3)) ou um sublinhado.  Esta é uma extensão, compatível  mas  não  específica  do
       POSIX  1003.2,  e deve ser usada com cautela em softwares que pretendem ser portáveis 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 próxima do início da string.  Se a ER pode encontrar mais
       que uma substring começando naquele ponto, ela  encontra  a  mais  longa.   Sub-expressões
       também  podem  encontrar  a  substring mais longa possível, sujeitando-se à limitação de o
       casamento todo ser tão longo quanto possível, com sub-expressões iniciando primeiro na  ER
       tendo prioridade sobre aquelas iniciando posteriormente.  Note que sub-expressões de nível
       mais alto, portanto, têm prioridade sobre suas sub-expressões componentes  de  nível  mais
       baixo.

       Os  comprimentos  dos  casamentos  são  medidos  em  caracteres,  e  não  em  elementos de
       combinação.  Uma string nula é considerada mais longa do que um caso de não  se  encontrar
       nada.   Por  exemplo, quando '(.*).*' é aplicado em 'abc' a sub-expressão entre parênteses
       casa todos os três caracteres, e quando '(a*)*' é aplicado em 'bc' ambas as ERs inteiras e
       a sub-expressão entre parênteses encontram a string nula.

       Se  casamento  independente  da  caixa  é  especificado,  o  efeito é tal como se todas as
       distinções de caixa sumissem do alfabeto.  Quando um alfabético que  existe  em  múltiplos
       casos  aparece  como  um  caractere  ordinário  fora  de  uma  expressão  de  colchete,  é
       transformado efetivamente em uma expressão de  colchetes  contendo  ambos  os  casos,  por
       exemplo,  'x'  se torna '[^xX]'.  Quando ele aparece dentro de uma expressão de colchetes,
       todos os casos equivalentes a ele são acrescentados à expressão de colchetes, de forma que
       (por exemplo) '[x]' se torna '[xX]' e '[^xX]'.

       Nenhum  limite particular é imposto sobre o comprimento das ERs†.  Programas que pretendem
       ser portáveis não devem empregar ERs maiores de 256 bytes,  pois  uma  implementação  pode
       negar-se a aceitar tais ERs para continuar compatível com o POSIX.

       Expressões regulares obsoletas ("básicas") diferem em vários aspectos.  Os sinais '+', '|'
       e '?' são caracteres ordinários e não  há  equivalentes  para  suas  funcionalidades.   Os
       delimitadores  para composição são '\{' and '\}', com '{' e '}' por eles mesmos caracteres
       ordinários.  Os parênteses para sub-expressões aninhadas são '\(' e '\)', com '('  e  ')',
       por  eles  mesmos caracteres ordinários.  O '^' é um caractere ordinário, exceto no começo
       de uma ER ou † no começo de uma  sub-expressão  com  parênteses,  o  '$'  é  um  caractere
       ordinário,  exceto  no  fim  da ER ou † no fim da sub-expressão com parênteses, e '*' é um
       caractere ordinário se ele aparece no começo da ER ou no começo de uma  sub-expressão  com
       parênteses  (depois  de um possível '^' dianteiro).  Finalmente, há um novo tipo de átomo,
       uma referência para trás: casa com a  mesma  sequência  de  caracteres  casada  pela  sub-
       expressão  de  parênteses  (numerando  sub-expressões  pelas  posições dos seus parênteses
       abertos, da esquerda para a direita), tal que (por exemplo) '\([bc]\)\1' case com 'bb'  ou
       'cc', mas não com 'bc'.

VEJA TAMBÉM

       regex(3)

       POSIX 1003.2, seção 2.8 (Notação de Expressão Regular).

PROBLEMAS

       Ter dois tipos de ERs é uma devastação.

       A  especificação corrente do 1003.2 diz que ')' é um caractere ordinário na ausência de um
       '(' não casado; este era um resultado não-intencional  de  um  erro  de  palavreamento,  e
       mudanças são parecidas.  Evite confiar nela.

       Referências   para  trás  são  uma  destruição  terrível,  causando  problemas  sérios  em
       implementações eficientes.  Elas também são definidas um pouco  vagamente  (fazendo  Evite
       usá-las.

       A  especificação  1003.2  para  casamentos independentes de caixa é vaga.  A definição "um
       caso implica em todos os casos" dada acima é um consenso  corrente  entre  implementadores
       como a interpretação correta.

       A sintaxe para os limites de palavra é incrivelmente feia.

AUTOR

       Esta página foi tomada do pacote regex de Henry Spencer.

TRADUZIDO POR LDP-BR em 21/08/2000.

       Rubens   de  Jesus  Nogueira  <darkseid99@usa.net>  (tradução)  André  L.  Fassone  Canova
       <lonelywolf@blv.com.br> (revisão)

                                            07/02/1994                                   REGEX(7)