.\" -*- 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 \- expressões regulares do POSIX 1003.2 .SH DESCRIÇÃO Expressões regulares (ERs), como definidas no POSIX 1003.2, vêm 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 "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; '\(dg' marca decisões nesses aspectos que não podem ser totalmente portáveis para outras implementações do 1003.2. .PP Uma (moderna) ER é uma\(dg ou mais\(dg \fIramificações\fR\(dg não-vazias\(dg , separadas por '|'. Ele encontra tudo o que casa com uma das ramificações. .PP Uma ramificação é um\(dg ou mais \fIpedaços\fR, concatenados. Ele encontra um casamento para o primeiro, seguido por um casamento para o segundo, etc. .PP Um pedaço é um \fIátomo\fR possivelmente seguido por um \(dg '*', '+', '?', simples ou composto. 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. .PP 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\(dg) 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 \fIi\fR, sem vírgula, encontra uma sequência de \fIi\fR ou mais casamentos do átomo. Um átomo seguido por uma composição contendo dois inteiros \fIi\fR encontra uma sequencia de um mais \fIi\fR casamentos do átomo. Um átomo seguido por uma composição contendo dois inteiros \fIi\fR e \fIj\fR encontra uma sequência de \fIi\fR até \fIj\fR (inclusive) casamentos do átomo. .PP Um átomo é uma expressão regular englobada em '()' (encontrando um casamento para a expressão regular), um conjunto vazio de '()' (encontrando a string nula)\(dg, uma \fIexpressão agrupada\fR (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 '\e' seguido de um dos caracteres '^.[$()|*+?{\e' (encontrando aquele caractere tomado como um caractere ordinário), um '\e' seguido por qualquer outro caractere\(dg (encontrando aquele caractere tomado como um caractere ordinário, como se o '\e' não estivesse presente\(dg), 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\(dg. É ilegal terminar uma ER com '\e'. .PP Uma \fIexpressão agrupada\fR é 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 \fIrange\fR 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 \(dg 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. .PP 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 '\e', perdem seu significado especial dentro de uma expressão agrupada. .PP 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'. .PP 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 \o'o^' são os membros de uma classe equivalente, então '[[=o=]]', '[[=\o'o^'=]]', e '[o\o'o^']' são todos sinônimos. Uma classe equivalente não pode \(dg ser um ponto final de uma faixa. .PP Dentro de uma expressão agrupada, o nome de uma \fIclasse de caractere\fR englobado por '[:' e ':]' significa a lista de todos os caracteres pertencente àquela classe. Os nomes padrão de classes de caracteres são: .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 não pode ser usada como um ponto final de uma faixa. .PP 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 .I alnum (como definido por .BR 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. .PP 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. .PP 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, 'bb*' encontra os três caracteres centrais de 'abbbc', '(wee|week)(knights|nights)' casa todos os dez caracteres de 'weeknights', 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. .PP 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]'. .PP Nenhum limite particular é imposto sobre o comprimento das ERs\(dg. 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. .PP 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 '\e{' and '\e}', com '{' e '}' por eles mesmos caracteres ordinários. Os parênteses para sub-expressões aninhadas são '\e(' e '\e)', com '(' e ')', por eles mesmos caracteres ordinários. O '^' é um caractere ordinário, exceto no começo de uma ER ou \(dg no começo de uma sub-expressão com parênteses, o '$' é um caractere ordinário, exceto no fim da ER ou \(dg 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 \fIreferência para trás\fR: '\e' seguido por um dígito decimal diferente de zero \fId\fR 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) '\e([bc]\e)\e1' case com 'bb' ou 'cc', mas não com 'bc'. .SH "VEJA TAMBÉM" .BR regex (3) .PP POSIX 1003.2, seção 2.8 (Notação de Expressão Regular). .SH PROBLEMAS Ter dois tipos de ERs é uma devastação. .PP 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. .PP 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 'a\e(\e(b\e)*\e2\e)*d' encontra 'abbbd'?). Evite usá-las. .PP 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. .PP A sintaxe para os limites de palavra é incrivelmente feia. .SH AUTOR Esta página foi tomada do pacote regex de Henry Spencer. .SH TRADUZIDO POR LDP-BR em 21/08/2000. \&\fR\&\f(CWRubens de Jesus Nogueira (tradução)\fR \&\fR\&\f(CWAndré L. Fassone Canova (revisão)\fR