diff options
Diffstat (limited to 'tde-i18n-pt/docs/tdebase/kate/regular-expressions.docbook')
-rw-r--r-- | tde-i18n-pt/docs/tdebase/kate/regular-expressions.docbook | 1218 |
1 files changed, 1218 insertions, 0 deletions
diff --git a/tde-i18n-pt/docs/tdebase/kate/regular-expressions.docbook b/tde-i18n-pt/docs/tdebase/kate/regular-expressions.docbook new file mode 100644 index 00000000000..015be08f1d1 --- /dev/null +++ b/tde-i18n-pt/docs/tdebase/kate/regular-expressions.docbook @@ -0,0 +1,1218 @@ +<appendix id="regular-expressions"> +<appendixinfo> +<authorgroup> +<author +>&Anders.Lund; &Anders.Lund.mail;</author> +<othercredit role="translator" +><firstname +>José</firstname +><surname +>Pires</surname +><affiliation +><address +><email +>jncp@netcabo.pt</email +></address +></affiliation +><contrib +>Tradução</contrib +></othercredit +> +</authorgroup> +</appendixinfo> + +<title +>Expressões Regulares</title> + +<synopsis +>Este Apêndice contém uma breve, mas abrangente e suficiente, introdução +ao mundo das <emphasis +>expressões regulares</emphasis +>. Ela documenta as +expressões regulares na forma que está disponível no &kate;, a qual não é +compatível com as expressões regulares do Perl, nem com as do +<command +>grep</command +>, por exemplo.</synopsis> + +<sect1> + +<title +>Introdução</title> + +<para +>As <emphasis +>Expressões Regulares</emphasis +> oferecem-nos uma forma de descrever alguns conteúdos possíveis de uma sequência de texto, a qual pode ser compreendida de certa forma por algum 'software', de modo a que este possa investigar se um texto corresponde, e também no caso das aplicações avançadas, com a possibilidade de guardar pedaços do texto correspondente.</para> + +<para +>Um exemplo: Imagine que deseja procurar num texto por parágrafos que comecem quer pelos nomes <quote +>Henrique</quote +> ou <quote +>Pedro</quote +>, seguidos de alguma forma do verbo <quote +>dizer</quote +>.</para> + +<para +>Com uma pesquisa normal, iria começar a procurar pelo primeiro nome, <quote +>Henrique</quote +>, sendo talvez seguido de <quote +>di</quote +>, como o seguinte: <userinput +>Henrique di</userinput +> e, enquanto procura por ocorrências, iria ignorar os que não se encontram no início de um parágrafo, assim como os que têm uma palavra que começa por <quote +>di</quote +> que não é <quote +>diz</quote +>, <quote +>disse</quote +> ou algo do género. Claro, e ainda ter que repetir isto com o próximo nome...</para> + +<para +>Com as Expressões Regulares, essa tarefa pode ser acompanhada com uma única pesquisa e com um maior grau de precisão.</para> + +<para +>Para conseguir isto, as Expressões Regulares definem regras para exprimir com detalhe uma generalização de uma sequência de texto com a qual corresponder. No nosso exemplo, o qual podemos exprimir literalmente da seguinte forma: <quote +>Uma linha que começa por <quote +>Henrique</quote +> ou <quote +>Pedro</quote +> (possivelmente a seguir a 4 espaços ou tabulações) seguida de um espaço em branco e da sequência <quote +>di</quote +>, sendo esta seguida de <quote +>z</quote +> ou <quote +>sse</quote +></quote +> pode ser expressa com a seguinte expressão regular:</para +> <para +><userinput +>^[ \t]{0,4}(Henrique|Pedro) di(z|sse)</userinput +></para> + +<para +>O exemplo anterior demonstra todos os quatro maiores conceitos das expressões regulares modernas, nomeadamente:</para> + +<itemizedlist> +<listitem +><para +>Padrões</para +></listitem> +<listitem +><para +>Asserções</para +></listitem> +<listitem +><para +>Quantificadores</para +></listitem> +<listitem +><para +>Referências anteriores</para +></listitem> +</itemizedlist> + +<para +>O acento circunflexo (<literal +>^</literal +>) no início da expressão é uma asserção ou verificação que é verdadeira só se o texto correspondente está no início da linha.</para> + +<para +>As sequências <literal +>[ \t]</literal +> e <literal +>(Henrique|Pedro) di(z|se)</literal +> são padrões. O primeiro é uma <emphasis +>classe de caracteres</emphasis +> que corresponde quer a um espaço em branco quer a uma tabulação (horizontal); o outro padrão contém, em primeiro lugar, um sub-padrão que corresponde quer a <literal +>Henrique</literal +> <emphasis +>quer a</emphasis +> <literal +>Pedro</literal +>, pelo que se segue o texto exacto <literal +> di</literal +> e, finalmente, existe um sub-padrão que corresponde a <literal +>z</literal +> <emphasis +>ou</emphasis +> a <literal +>sse</literal +></para> + +<para +>A sequência <literal +>{0,4}</literal +> é um quantificador que diz <quote +>qualquer número de vezes entre 0 e 4 da sequência anterior</quote +>.</para> + +<para +>Como o 'software' de expressões regulares suporta o conceito de <emphasis +>referências anteriores</emphasis +>, ele guarda a parte inteira correspondente ao texto, bem como aos sub-padrões entre parêntesis; se for dado um meio de aceder a essas referências, pode-se aceder a toda a correspondência (ao procurar num documento de texto num editor com uma expressão regular, esta é normalmente marcada como seleccionada), apenas ao nome encontrado, ou à última parte do verbo.</para> + +<para +>Tudo em conjunto, a expressão irá corresponder onde nós queiramos que o faça, e só aí.</para> + +<para +>As secções seguintes irão descrever em detalhe como construir e usar os padrões, as classes de caracteres, as verificações, os quantificadores e as referências anteriores; a secção final irá dar alguns exemplos úteis.</para> + +</sect1> + +<sect1 id="regex-patterns"> + +<title +>Padrões</title> + +<para +>Os padrões consistem em cadeias de caracteres literais e em classes de caracteres. Os padrões podem conter sub-padrões, que são padrões entre parêntesis.</para> + +<sect2> +<title +>Caracteres de escape</title> + +<para +>Tanto nos padrões como nas classes de caracteres, alguns caracteres têm um significado especial. Para corresponder literalmente com algum desses caracteres, estes têm de ser marcados ou <emphasis +>escapados</emphasis +>, para permitir ao 'software' de expressões regulares perceber que deve interpretar esses caracteres no seu sentido literal.</para> + +<para +>Isto é feito, antecedendo o carácter com uma barra invertida (<literal +>\</literal +>).</para> + + +<para +>O 'software' de expressões regulares irá ignorar silenciosamente uma barra para um carácter que não tenha um significado especial no contexto; por isso, se escapar, por exemplo, um <quote +>j</quote +> (<userinput +>\j</userinput +>), não há problema. Se tiver dúvidas se um carácter poderá ter algum significado especial, podê-lo-á então escapar em segurança.</para> + +<para +>A marcação inclui o próprio carácter de barra; por isso, para escapar uma barra, deveria escrever <userinput +>\\</userinput +>.</para> + +</sect2> + +<sect2> +<title +>Classes de Caracteres e abreviaturas</title> + +<para +>Uma <emphasis +>classe de caracteres</emphasis +> é uma expressão que corresponde a um carácter, dentro de um conjunto definido de caracteres. Nas Expressões Regulares, as classes de caracteres são definidas, pondo os caracteres permitidos para a classe entre parêntesis rectos, <literal +>[]</literal +>, ou usando uma das classes abreviadas descritas em seguida.</para> + +<para +>As classes de caracteres simples contêm apenas um ou mais caracteres literais, como por exemplo <userinput +>[abc]</userinput +> (o que pode corresponder quer a <quote +>a</quote +>, a <quote +>b</quote +> ou a <quote +>c</quote +>), ou então o <userinput +>[0123456789]</userinput +> (que corresponde a qualquer dígito).</para> + +<para +>Dado que as letras e os números têm uma ordem lógica, podê-los-á abreviar, indicando intervalos: o <userinput +>[a-c]</userinput +> é igual a <userinput +>[abc]</userinput +> e o <userinput +>[0-9]</userinput +> é igual a <userinput +>[0123456789]</userinput +>. Combinando estas opções, por exemplo <userinput +>[a-fynot1-38]</userinput +> é perfeitamente possível (a última classe irá corresponder a um dos seguintes caracteres: <quote +>a</quote +>,<quote +>b</quote +>,<quote +>c</quote +>,<quote +>d</quote +>, <quote +>e</quote +>,<quote +>f</quote +>,<quote +>y</quote +>,<quote +>n</quote +>,<quote +>o</quote +>,<quote +>t</quote +>, <quote +>1</quote +>,<quote +>2</quote +>,<quote +>3</quote +> ou <quote +>8</quote +>).</para> + +<para +>Dado que as letras maiúsculas são caracteres diferentes dos seus equivalentes minúsculos, para criar uma classe de caracteres indiferente da capitalização que corresponda quer a <quote +>a</quote +> ou a <quote +>b</quote +> em qualquer dos casos, será necessário indicá-la como <userinput +>[aAbB]</userinput +>.</para> + +<para +>Obviamente, é possível criar uma classe <quote +>negativa</quote +> que corresponda a <quote +>tudo excepto</quote +>. Para o fazer, coloque um acento circunflexo (<literal +>^</literal +>) no início da classe: </para> + +<para +><userinput +>[^abc]</userinput +> irá corresponder a qualquer carácter <emphasis +>excepto</emphasis +> o <quote +>a</quote +>, o <quote +>b</quote +> ou o <quote +>c</quote +>.</para> + +<para +>Para além dos caracteres literais, estão definidas algumas abreviaturas, o que torna a vida um pouco mais fácil: <variablelist> + +<varlistentry> +<term +><userinput +>\a</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> da campainha (BEL, 0x07).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\f</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> de 'form feed' (FF, 0x0C).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\n</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> de 'line feed' (LF, 0x0A, a mudança de linha do Unix).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\r</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> de 'carriage return' (CR, 0x0D).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\t</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> de tabulação horizontal (HT, 0x09).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\v</userinput +></term> +<listitem +><para +>Isto corresponde ao carácter <acronym +>ASCII</acronym +> de tabulação vertical (VT, 0x0B).</para +></listitem> +</varlistentry> +<varlistentry> +<term +><userinput +>\xhhhh</userinput +></term> + +<listitem +><para +>Isto corresponde ao carácter Unicode com o código hexadecimal 'hhhh' (entre 0x0000 e 0xFFFF). O \0ooo (isto é, \zero ooo) corresponde ao carácter <acronym +>ASCII</acronym +>/Latin-1 com o código octal 'ooo' (entre 0 e 0377).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>.</userinput +> (ponto)</term> +<listitem +><para +>Isto corresponde a qualquer carácter (mesmo à mudança de linha).</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\d</userinput +></term> +<listitem +><para +>Corresponde a um dígito. É igual a <literal +>[0-9]</literal +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\D</userinput +></term> +<listitem +><para +>Corresponde a um não-dígito. É igual a <literal +>[^0-9]</literal +> ou <literal +>[^\d]</literal +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\s</userinput +></term> +<listitem +><para +>Corresponde a um carácter em branco. É praticamente igual a <literal +>[ \t\n\r]</literal +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\S</userinput +></term> +<listitem +><para +>Corresponde a um carácter não-branco. É praticamente igual a <literal +>[^ \t\r\n]</literal +> e igual a <literal +>[^\s]</literal +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\w</userinput +></term> +<listitem +><para +>Corresponde a qualquer <quote +>carácter de palavra</quote +> - neste caso, qualquer letra ou dígito. Repare que o sublinhado (<literal +>_</literal +>) não corresponde, como acontece com as expressões regulares do Perl. É igual a <literal +>[a-zA-Z0-9]</literal +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\W</userinput +></term> +<listitem +><para +>Corresponde a um não-carácter de palavra - tudo menos letras ou dígitos. É igual a <literal +>[^a-zA-Z0-9]</literal +> ou <literal +>[^\w]</literal +></para +></listitem> +</varlistentry> + + +</variablelist> + +</para> + +<para +>As classes abreviadas podem ser postas dentro de uma classe personalizada; por exemplo, para corresponder a um carácter de palavra, a um espaço em branco ou a um ponto, poderia escrever <userinput +>[\w \.]</userinput +></para +> + +<note +> <para +>A notação POSIX das classes, <userinput +>[:<nome da classe>:]</userinput +> não é suportada de momento.</para +> </note> + +<sect3> +<title +>Os caracteres com significados especiais dentro de classes de caracteres</title> + +<para +>Os seguintes caracteres têm um significado especial dentro da estrutura da classe de caracteres <quote +>[]</quote +>, devendo ser escapados para serem incluídos literalmente dentro de uma classe:</para> + +<variablelist> +<varlistentry> +<term +><userinput +>]</userinput +></term> +<listitem +><para +>Termina a classe de caracteres. Deve ser escapada, a menos que seja o primeiro carácter da classe (pode estar a seguir a um ^ não-escapado)</para +></listitem> +</varlistentry> +<varlistentry> +<term +><userinput +>^</userinput +> (acento circunflexo)</term> +<listitem +><para +>Denota uma classe negativa, se for o primeiro carácter. Deve ser escapado para ser correspondido literalmente, se for o primeiro carácter da classe.</para +></listitem +> +</varlistentry> +<varlistentry> +<term +><userinput +>-</userinput +> (traço)</term> +<listitem +><para +>Denota um intervalo lógico. Deve estar sempre escapado numa classe de caracteres.</para +></listitem> +</varlistentry> +<varlistentry> +<term +><userinput +>\</userinput +> (barra invertida)</term> +<listitem +><para +>O carácter de escape. Deve ser sempre escapado.</para +></listitem> +</varlistentry> + +</variablelist> + +</sect3> + +</sect2> + +<sect2> + +<title +>Alternativas: corresponder a <quote +>um de</quote +></title> + +<para +>Se quiser corresponder a um elemento de um conjunto de padrões alternativos, podê-los-á separar com o <literal +>|</literal +> (carácter de barra vertical).</para> + +<para +>Por exemplo, se quiser encontrar tanto <quote +>João</quote +> como <quote +>Henrique</quote +>, poderá usar uma expressão <userinput +>João|Henrique</userinput +>.</para> + +</sect2> + +<sect2> + +<title +>Sub-Padrões</title> + +<para +>Os <emphasis +>sub-padrões</emphasis +> são padrões colocados dentro de parêntesis, e podem ter várias utilizações no mundo das expressões regulares.</para> + +<sect3> + +<title +>Definir alternativas</title> + +<para +>Poderá usar um sub-padrão para agrupar um conjunto de alternativas num padrão maior. As alternativas são separadas pelo carácter <quote +>|</quote +> (barra vertical).</para> + +<para +>Por exemplo, para corresponder a uma das palavras <quote +>int</quote +>, <quote +>float</quote +> ou <quote +>double</quote +>, poderia usar o padrão <userinput +>int|float|double</userinput +>. Se só desejar encontrar uma, se estiver seguida de algum espaço e de algumas letras, ponha as alternativas dentro de um sub-padrão: <userinput +>(int|float|double)\s+\w+</userinput +>.</para> + +</sect3> + +<sect3> + +<title +>Capturar o texto correspondente (referências anteriores)</title> + +<para +>Se desejar usar uma referência anterior, use um sub-padrão para obter a parte desejada do padrão recordado.</para> + +<para +>Por exemplo, se quiser encontrar duas ocorrências da mesma palavra, separadas por uma vírgula e provavelmente por algum espaço, poderia escrever <userinput +>(\w+),\s*\1</userinput +>. O sub-padrão <literal +>\w+</literal +> iria encontrar um conjunto de caracteres de palavra e a expressão inteira iria corresponder, se estas fossem seguidas por uma vírgula, 0 ou mais espaços e por um conjunto igual de caracteres de palavras. (O texto <literal +>\1</literal +> referencia <emphasis +>o primeiro sub-padrão entre parêntesis</emphasis +>)</para> + +<!-- <para +>See also <link linkend="backreferences" +>Back references</link +>.</para +> --> + +</sect3> + +<sect3 id="lookahead-assertions"> +<title +>Verificações Antecipadas</title> + +<para +>Uma verificação antecipada é um sub-padrão que começa por <literal +>?=</literal +> ou por <literal +>?!</literal +>.</para> + +<para +>Por exemplo, para fazer a correspondência com o nome <quote +>Bill</quote +> mas só se não for seguido de <quote +> Gates</quote +>, podia usar esta expressão: <userinput +>Bill(?! Gates)</userinput +>. (Isto iria encontrar o <quote +>Bill Clinton</quote +>, assim como o <quote +>Billy the kid</quote +>, mas iria ignorar as outras correspondências).</para> + +<para +>Os sub-padrões usados para as verificações não são capturados.</para> + +<para +>Veja também as <link linkend="assertions" +>Asserções ou Verificações</link +></para> + +</sect3> + +</sect2> + +<sect2 id="special-characters-in-patterns"> +<title +>Os caracteres com um significado especial dentro de padrões</title> + +<para +>Os seguintes caracteres têm significado próprio dentro de um padrão, e necessitam ser escapados se quiser fazer correspondência com eles: <variablelist> + +<varlistentry> +<term +><userinput +>\</userinput +> (barra invertida)</term> +<listitem +><para +>O carácter de escape.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>^</userinput +> (acento circunflexo)</term> +<listitem +><para +>Corresponde ao início do texto.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>$</userinput +></term> +<listitem +><para +>Verifica o fim do texto.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>()</userinput +> (parêntesis esquerdo e direito)</term> +<listitem +><para +>Denota os sub-padrões.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>{}</userinput +> (chavetas esquerda e direita)</term> +<listitem +><para +>Denota os quantificadores numéricos.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>[]</userinput +> (parêntesis rectos esquerdo e direito)</term> +<listitem +><para +>Denota as classes de caracteres.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>|</userinput +> (barra vertical)</term> +<listitem +><para +>OU lógico; separa as alternativas.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>+</userinput +> (sinal mais)</term> +<listitem +><para +>Quantificador, 1 ou mais.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>*</userinput +> (asterisco)</term> +<listitem +><para +>Quantificador, 0 ou mais.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>?</userinput +> (ponto de interrogação)</term> +<listitem +><para +>Um carácter opcional. Pode ser interpretado como um quantificador 0 ou 1.</para +></listitem> +</varlistentry> + +</variablelist> + +</para> + +</sect2> + +</sect1> + +<sect1 id="quantifiers"> +<title +>Quantificadores</title> + +<para +>Os <emphasis +>quantificadores</emphasis +> permitem a uma expressão regular fazer a correspondência com um número ou intervalo específico de vezes nas quais ocorre um carácter, classe de caracteres ou sub-padrão.</para> + +<para +>Os quantificadores estão delimitados por chavetas (<literal +>{</literal +> e <literal +>}</literal +>) e têm a forma geral <literal +>{[mínimo-de-ocorrências][,[máximo-de-ocorrências]]}</literal +> </para> + +<para +>A sua utilização será melhor explicada com um exemplo: <variablelist> + +<varlistentry> +<term +><userinput +>{1}</userinput +></term> +<listitem +><para +>Exactamente 1 ocorrência</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>{0,1}</userinput +></term> +<listitem +><para +>Zero ou 1 ocorrências</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>{,1}</userinput +></term> +<listitem +><para +>O mesmo, mas com menos trabalho ;)</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>{5,10}</userinput +></term> +<listitem +><para +>Pelo menos 5, mas no máximo 10 ocorrências.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>{5,}</userinput +></term> +<listitem +><para +>Pelo menos 5 ocorrências, sem máximo.</para +></listitem> +</varlistentry> + +</variablelist> + +</para> + +<para +>Adicionalmente, existem algumas abreviaturas: <variablelist> + +<varlistentry> +<term +><userinput +>*</userinput +> (asterisco)</term> +<listitem +><para +>semelhante a <literal +>{0,}</literal +>, encontra qualquer número de ocorrências.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>+</userinput +> (sinal mais)</term> +<listitem +><para +>semelhante a <literal +>{1,}</literal +>, pelo menos 1 ocorrência.</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>?</userinput +> (ponto de interrogação)</term> +<listitem +><para +>semelhante a <literal +>{0,1}</literal +>, zero ou uma ocorrências.</para +></listitem> +</varlistentry> + +</variablelist> + +</para> + +<sect2> + +<title +>Ganância</title> + +<para +>Ao usar quantificadores sem máximos, as expressões regulares tentam corresponder com o máximo do texto possível, um comportamento designado normalmente como <emphasis +>greedy</emphasis +> (ambicioso).</para> + +<para +>O 'software' de expressões regulares moderno oferece as opções para <quote +>desligar esse comportamento</quote +>, ainda que, num ambiente gráfico, isto dependa da interface que der para a funcionalidade. Por exemplo, uma janela de procura, que ofereça uma pesquisa de expressões regulares, poderia ter uma opção chamada <quote +>Correspondência mínima</quote +>, assim como podia indicar se o comportamento ambicioso é o comportamento por omissão.</para> + +</sect2> + +<sect2> +<title +>Exemplos no contexto</title> + +<para +>Aqui estão alguns exemplos da utilização de quantificadores</para> + +<variablelist> + +<varlistentry> +<term +><userinput +>^\d{4,5}\s</userinput +></term> +<listitem +><para +>Corresponde aos dígitos em <quote +>1234 go</quote +> e em <quote +>12345 now</quote +>, mas não corresponde a <quote +>567 eleven</quote +> ou a <quote +>223459 somewhere</quote +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\s+</userinput +></term> +<listitem +><para +>Corresponde a um ou mais caracteres em branco</para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>(bla){1,}</userinput +></term> +<listitem +><para +>Corresponde a tudo de <quote +>blablabla</quote +> e a <quote +>bla</quote +> em <quote +>blackbird</quote +> ou em <quote +>tabela</quote +></para +></listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>/?></userinput +></term> +<listitem +><para +>Corresponde a <quote +>/></quote +> em <quote +><closeditem/></quote +> assim como a <quote +>></quote +> em <quote +><openitem></quote +>.</para +></listitem> +</varlistentry> + +</variablelist> + +</sect2> + +</sect1> + +<sect1 id="assertions"> +<title +>Asserções</title> + +<para +>As <emphasis +>verificações</emphasis +> ou asserções permitem a uma expressão regular fazer a correspondência, apenas sob determinadas condições controladas.</para> + +<para +>Uma verificação não precisa de um carácter com o qual corresponder; em vez disso, verifica os limites de uma possível correspondência antes de a indicar. Por exemplo, a verificação de <emphasis +>limite de palavra</emphasis +> não tenta encontrar um carácter não pertencente a uma palavra junto com um carácter de palavra, mas sim tenta ter a certeza que não existe um carácter de palavra. Isto significa que a verificação pode corresponder onde não existir um carácter, isto é, no fim do texto a pesquisar.</para> + +<para +>Algumas verificações, de facto, têm um padrão de correspondência, mas a parte do texto que correspondeu não será uma parte do resultado da correspondência, em relação à expressão completa.</para> + +<para +>As Expressões Regulares aqui referidas suportam as seguintes verificações: <variablelist> + +<varlistentry +> +<term +><userinput +>^</userinput +> (acento circunflexo: início do texto)</term +> +<listitem +><para +>Corresponde ao início do texto a pesquisar.</para +> <para +>A expressão <userinput +>^Pedro</userinput +> irá corresponder a <quote +>Pedro</quote +> no texto <quote +>Pedro, olá!</quote +> mas não em <quote +>Olá, Pedro!</quote +> </para +> </listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>$</userinput +> (fim do texto)</term> +<listitem +><para +>Corresponde ao fim do texto a pesquisar.</para> + +<para +>A expressão <userinput +>tu\?$</userinput +> irá corresponder ao último 'tu' no texto <quote +>tu não fizeste isto, ou foste tu?</quote +> mas não fará correspondência em <quote +>tu não fizeste isto, certo?</quote +></para> + +</listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>\b</userinput +> (limite de palavra)</term> +<listitem +><para +>Corresponde a um limite de palavra de um lado e se não é um carácter de palavra do outro.</para> +<para +>Isto é útil para encontrar limites das palavras como, por exemplo, ambos os extremos para encontrar uma palavra inteira. A expressão <userinput +>\bem\b</userinput +> irá corresponde ao <quote +>em</quote +> separado no texto <quote +>Ele entrou em Enfermagem</quote +>, mas não corresponder a <quote +>em</quote +> na palavra <quote +>Enfermagem</quote +>.</para +></listitem> + +</varlistentry> + +<varlistentry> +<term +><userinput +>\B</userinput +> (não-limite de palavra)</term> +<listitem +><para +>Corresponde nos locais onde o <quote +>\b</quote +> não faz correspondência.</para> +<para +>Isto significa que ele irá fazer correspondência, por exemplo, dentro de palavras. A expressão <userinput +>\Bem\B</userinput +> irá corresponder a <quote +>sempre</quote +> mas não a <quote +>cem</quote +> ou a <quote +>Estou em casa</quote +>.</para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>(?=PADRÃO)</userinput +> (Antevisão positiva)</term> +<listitem +><para +>Uma verificação antecipada olha para a parte do texto a seguir a uma possível correspondência. A antecipação positiva irá evitar que o texto corresponda se o texto que se encontra a seguir a possível correspondência não corresponder ao <emphasis +>PADRÃO</emphasis +> da verificação; o texto correspondente não será incluído no resultado.</para> +<para +>A expressão <userinput +>utilizar(?=\w)</userinput +> irá corresponder a <quote +>utilizar</quote +> em <quote +>utilizarei</quote +>, mas não irá corresponder com <quote +>Não vou utilizar!</quote +></para> +</listitem> +</varlistentry> + +<varlistentry> +<term +><userinput +>(?!PADRÃO)</userinput +> (Antevisão Negativa)</term> + +<listitem +><para +>A antevisão negativa evita que uma possível correspondência seja extraída, se a parte subsequente ao texto procurado corresponder ao <emphasis +>PADRÃO</emphasis +>.</para> +<para +>A expressão <userinput +>const \w+\b(?!\s*&)</userinput +> irá corresponder com o <quote +>const char</quote +> do texto <quote +>const char* ola</quote +>, embora não corresponderá a <quote +>const QString</quote +> em <quote +>const QString& bar</quote +> porque o <quote +>&</quote +> corresponde ao padrão de verificação antecipada negativa.</para> +</listitem> +</varlistentry> + +</variablelist> + +</para> + +</sect1> + +<!-- TODO sect1 id="backreferences"> + +<title +>Back References</title> + +<para +></para> + +</sect1 --> + +</appendix> |