Provided by: manpages-pt_20040726-2_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† ramificaes† não-vazias† ,  separadas
       por ’|’.  Ele encontra tudo o que casa com uma das ramificações.

       Uma  ramificação  é um† ou mais pedaos, 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 expresso 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  expresso  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 referncia  para  trs:  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)