You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-i18n/tde-i18n-pt_BR/docs/tdebase/kate/regular-expressions.docbook

486 lines
25 KiB

<appendix id="regular-expressions">
<appendixinfo>
<authorgroup>
<author>&Anders.Lund; &Anders.Lund.mail;</author>
<othercredit role="translator"><firstname>Lisiane</firstname><surname>Sztoltz</surname><affiliation><address><email>lisiane@conectiva.com.br</email></address></affiliation><contrib>Tradução</contrib></othercredit>
</authorgroup>
</appendixinfo>
<title>Expressões Regulares</title>
<synopsis>Este Apêndice contém uma breve mas suficiente introdução sobre o
mundo das <emphasis>expressões regulares</emphasis>. Ele documenta
expressões regulares na forma disponível dentro do &kate;, que
não é compatível com as expressões regulares do Perl, ou de
outros comandos como o <command>grep</command>.</synopsis>
<sect1>
<title>Introdução</title>
<para>As <emphasis>Expressões Regulares</emphasis> nos fornecem uma maneira de descrever alguns possíveis conteúdos de uma string de texto, de modo a ser entendido por um pedaço de software, e assim, ele pode investigar se um texto combina, e também no caso de aplicações avançadas, com o objetivo de salvar pedaços ou o texto que combina com a busca.</para>
<para>Um exemplo. Digamos que você deseja buscar, em um texto, por parágrafos que iniciam com um desses nomes: <quote>Henrik</quote> ou<quote>Pernille </quote>, seguido por alguma forma do verbo <quote>dizer</quote>.</para>
<para>Em uma busca normal, você iniciaria com o primeiro nome, <quote>Henrik </quote>, talvez seguido por um <quote>di</quote>, como isto: <userinput> Henrik di</userinput>, e ao procurar por combinações, teria que descartar aquelas que não estão do início de uma parágrafo, bem como aquelas em que a palavra inicia com as letras <quote>di</quote> como <quote>disse</quote>, ou <quote>diz</quote>, e assim por diante. E então, isto causa a repetição de tudo isto com o próximo nome...</para>
<para>Com as Expressões Regulares, aquela tarefa poderia ser cumprida com uma única busca, e com um grau maior de precisão.</para>
<para>Para obter isto, as Expressões Regulares definem regras para expressar em detalhes uma generalização de uma string que será procurada. Podemos literalmente expressar nosso exemplo assim: <quote> Uma linha iniciada com <quote>Henrik</quote> ou <quote>Pernille </quote> (possivelmente seguido por 4 caracteres em branco ou tabs) seguido por um espaço em branco, seguido por um <quote>di</quote> e então, um <quote>iz</quote> ou <quote>sse</quote></quote>, que poderia ser colocado na seguinte expressão regular:</para> <para><userinput>^[ \t]{0,4}(Henrik|Pernille) di(sse|z)</userinput></para>
<para>O exemplo anterior demonstra todos os quatro conceitos principais das Expressões Regulares modernas, chamados:</para>
<itemizedlist>
<listitem><para>Padrões</para></listitem>
<listitem><para>Afirmações</para></listitem>
<listitem><para>Quantificadores</para></listitem>
<listitem><para>Referências para trás</para></listitem>
</itemizedlist>
<para>O acento circunflexo (<literal>^</literal>) no início da expressão é uma afirmação, sendo verdade somente se a string relacionada estiver no início de uma linha.</para>
<para>As strings <literal>[ \t]</literal> e <literal>(Henrik|Pernille) di(sse|z)</literal> são padrões. A primeira é uma <emphasis>classe de caractere </emphasis> que combina ou com um espaço em branco ou com um caractere de tabulação (horizontal); o outro padrão contém primeiramente um sub-padrão que combina ou com <literal>Henrik</literal> <emphasis>ou com </emphasis> <literal>Pernille</literal>. Em seguida, vem um pedaço que corresponde exatamente com a string <literal>di</literal> e, finalmente segue um sub-padrão que combina com <literal>sse</literal> <emphasis>ou</emphasis> com <literal>z</literal>.</para>
<para>A string <literal>{0,4}</literal> é um quantificado dizendo <quote>qualquer número de 0 até 4 da string anterior</quote>.</para>
<para>Por causa do suporte ao conceito de <emphasis>referência para trás </emphasis> das expressões regulares, é economizado uma parte inteira combinada da string, bem como os sub-padrões incluídos em parênteses; fornecidos alguns tipos de acesso para aquelas referências, podemos obter nossos meios de encontrar a string inteira (ao se procurar um documento de texto em um editor com uma expressão regular, o que é marcado freqüentemente) ou o nome encontrado, ou a última parte do verbo.</para>
<para>Toda junta, a expressão procurará o que você desejar que ela procure, e somente ali.</para>
<para>As seções seguintes descreverão em detalhes como construir e usar padrões, classes de caracteres, afirmações, quantificadores e referências para trás, e a seção final fornecerá alguns exemplos úteis.</para>
</sect1>
<sect1 id="regex-patterns">
<title>Padrões</title>
<para>Padrões consistem de strings literais e classes de caracteres, e podem conter sub-padrões, que são padrões cercados por parênteses.</para>
<sect2>
<title>Escapando caracteres</title>
<para>Em padrões, bem como em classes de caracteres, alguns caracteres possuem um significado especial. Para combinar literalmente quaisquer um destes caracteres, eles devem ser marcados ou <emphasis> escapados</emphasis>, para deixar com que o software saiba que deve interpretar tais caracteres de maneira literal.</para>
<para>Isto é feito anexando no início do caractere uma barra invertida (<literal>\</literal>).</para>
<para>O software de expressão regular silenciosamente ignorará, escapando um caractere que não possui nenhum significado especial no contexto; assim, escapar, por exemplo, um <quote>j</quote> (<userinput>\j </userinput>) é seguro. Se você tiver dúvidas se um caractere possui significado especial, você pode, portanto, escapá-lo seguramente.</para>
<para>Para escapar a própria barra invertida, para combinar literalmente, você escreveria <userinput>\\</userinput>.</para>
</sect2>
<sect2>
<title>Classes de Caracteres e abreviações</title>
<para>Uma <emphasis>classe de caractere</emphasis> é uma expressão que combina um dos caracteres de um conjunto definido. Em Expressões Regulares, as classes de caracteres são definidas colocado-se os caracteres legais em uma classe com colchetes (<literal>[]</literal>), ou usando uma das classes abreviadas descritas abaixo.</para>
<para>Classes de caracteres simples contém um ou mais caracteres literais, como por exemplo <userinput>[abc]</userinput> (combinando com uma das letras: <quote>a</quote>, <quote>b</quote> ou <quote>c</quote>) ou <userinput>[0123456789]</userinput> (combinando com qualquer dígito).</para>
<para>Pela ordem lógica das letras e dígitos, você pode abreviá-los especificando intervalos com eles: <userinput>[a-c]</userinput> é igual a <userinput>[abc]</userinput> e <userinput>[0-9]</userinput> é igual a <userinput>[0123456789]</userinput>. Combinando estas construções, o exemplo <userinput>[a-fynot1-38]</userinput> é completamente legal (ele combinaria com um destes: <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 com <quote>8</quote>).</para>
<para>Como as letras maiúsculas são diferentes de minúsculas em expressões, para criar uma classe de caracteres que não diferenciasse maiúsculas de minúsculas, combinando por exemplo com <quote>a</quote> ou <quote>b</quote>, em qualquer caso, você precisaria escrever <userinput>[aAbB]</userinput>.</para>
<para>Isto faz com que seja possível criar uma classe <quote>negativa</quote> combinando com <quote>tudo menos aquilo</quote>. Para fazer isto, coloque o acento circunflexo (<literal>^</literal>) no início da classe: </para>
<para><userinput>[^abc]</userinput> combinará com qualquer caractere <emphasis>menos com </emphasis> <quote>a</quote>, <quote>b</quote> ou <quote>c</quote>.</para>
<para>Além disso, para caracteres literais, algumas abreviações são definidas, tornando a vida um pouco mais fácil: <variablelist>
<varlistentry>
<term><userinput>\a</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> da campainha (BEL, 0x07).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\f</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> de nova página (FF, 0x0C).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\n</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> de nova linha (LF, 0x0A, nova linha do Unix).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\r</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> de retorno de carro (CR, 0x0D).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\t</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> de tabulação horizontal (HT, 0x09).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\v</userinput></term>
<listitem><para>Isto combina com o caractere <acronym>ASCII</acronym> de tabulação vertical (VT, 0x0B).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\xhhhh</userinput></term>
<listitem><para>Isto combina com o caractere Unicode correspondente ao número hexadecimal hhhh (entre 0x0000 e 0xFFFF). \0ooo (&ie;, \zero ooo) combina com o caractere <acronym>ASCII</acronym>/Latin-1 correspondente ao número octal ooo (entre 0 e 0377).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>.</userinput> (ponto)</term>
<listitem><para>Isto combina com qualquer caractere (incluindo nova linha).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\d</userinput></term>
<listitem><para>Isto combina com um dígito. É igual a <literal>[0-9]</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\D</userinput></term>
<listitem><para>Isto combina com um caractere que não seja dígito. Igual a <literal> [^0-9]</literal> ou <literal>[^\d]</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\s</userinput></term>
<listitem><para>Isto combina com um caractere em branco. Praticamente igual a <literal>[\t\n\r]</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\S</userinput></term>
<listitem><para>Combina com o que não seja espaço em 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>Combina com quaisquer <quote>caractere da palavra</quote>, neste caso quaisquer letras ou dígitos. Note que o caractere de sublinhado (ou underscore - <literal>_</literal>) não combina, como é o caso com expressões regulares do Perl. Igual a <literal>[a-zA-Z0-9]</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\W</userinput></term>
<listitem><para>Combina com qualquer caractere diferente de palavra - qualquer coisa menos letras ou números. Igual a <literal>[^a-zA-Z0-9]</literal> ou <literal>[^\w]</literal></para></listitem>
</varlistentry>
</variablelist>
</para>
<para>As classes abreviadas pode ser colocadas dentro de classes personalizadas, como por exemplo: para combinar um caractere de palavra, um em branco ou um ponto, você poderia escrever <userinput>[\w\.]</userinput></para>
<note> <para>A notação POSIX de classes, <userinput>[:&lt;nome da classe&gt;:]</userinput>, atualmente não é suportada.</para> </note>
<sect3>
<title>Caracteres com significado especial dentro das classes</title>
<para>Os seguintes caracteres possuem um significado especial dentro da construção <quote>[]</quote> de classes de caractere, e deve ser escapado para ser literalmente incluído em uma classe:</para>
<variablelist>
<varlistentry>
<term><userinput>]</userinput></term>
<listitem><para>Finaliza a classe. Deve ser escapado, a menos que este caractere seja o primeiro da classe (pode ser seguido por um circunflexo não-escapado)</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>^</userinput> (circunflexo)</term>
<listitem><para>Denota uma classe negativa, se for o primeiro caractere. Deve ser escapado para combinar literalmente, se for o primeiro caractere da classe.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>-</userinput> (hífen)</term>
<listitem><para>Denota um intervalo lógico. Deve sempre ser escapado dentro de uma classe.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\</userinput> (barra invertida)</term>
<listitem><para>O caractere de escape. Deve sempre ser escapado.</para></listitem>
</varlistentry>
</variablelist>
</sect3>
</sect2>
<sect2>
<title>Alternativas: combinando <quote>um deles</quote></title>
<para>Se você deseja combinar um de um conjunto de padrões alternativos, pode separá-los com o caractere de barra vertical: <literal>|</literal></para>
<para>Por exemplo: para encontrar a palavra <quote>John</quote> ou a palavra <quote>Harry</quote>, você usaria uma expressão do tipo <userinput>John|Harry</userinput>.</para>
</sect2>
<sect2>
<title>Sub-padrões</title>
<para><emphasis>Sub-padrões</emphasis> são padrões fechados entre parênteses, e possuem vários usos no mundo das expressões regulares.</para>
<sect3>
<title>Especificando alternativas</title>
<para>Você pode usar sub-padrões para agrupar um conjunto de alternativas dentro de um padrão maior. As alternativas são separadas pelo caractere <quote>|</quote> (barra vertical).</para>
<para>Por exemplo: para procurar uma das palavras <quote>int</quote>, <quote>float</quote> ou <quote>double</quote>, você poderia usar o padrão <userinput>int|float|double</userinput>. Se você deseja somente encontrar delas, se for seguida por algum espaço em branco e então algumas letras, coloque as alternativas dentro de um sub-padrão: <userinput>(int|float|double)\s+\w+</userinput>.</para>
</sect3>
<sect3>
<title>Capturando texto relacionado (referências anteriores)</title>
<para>Se você deseja usar uma referência anterior, use um sub-padrão para ter a parte desejada do padrão lembrada.</para>
<para>Por exemplo: se você deseja encontras duas ocorrências da mesma palavra, separadas por vírgula, e possivelmente algum espaço em branco, poderia escrever: <userinput>(\w+),\s*\1</userinput>. O sub-padrão <literal>\w+</literal> procuraria pelo pedaço dos caracteres da palavra, e a expressão inteira combinaria se aquelas forem separadas por uma vírgula, 0 ou mais espaços em branco, e então, um pedaço igual de caracteres da palavra (a string <literal>\1</literal> referencia <emphasis>o primeiro sub-padrão entre os parênteses</emphasis>).</para>
<!-- <para>See also <link linkend="backreferences">Back references</link>.</para> -->
</sect3>
<sect3 id="lookahead-assertions">
<title>Afirmações Adiante</title>
<para>Uma afirmação do tipo adiante é um sub-padrão, iniciando com <literal>?=</literal> ou <literal>?!</literal>.</para>
<para>Por exemplo: para combinar a string literal <quote>Bill</quote> , mas somente seguida por <quote> Gates</quote>, você poderia usar esta expressão: <userinput>Bill(?! Gates)</userinput> (isto procuraria por <quote>Bill Clinton</quote>, bem como por <quote>Billy the kid</quote>, mas ele silenciosamente ignoraria as outras combinações).</para>
<para>Os sub-padrões usados para as afirmações não são capturados.</para>
<para>Veja também em <link linkend="assertions">Afirmações</link></para>
</sect3>
</sect2>
<sect2 id="special-characters-in-patterns">
<title>Caracteres com significado especial dentro de padrões</title>
<para>Os seguintes caracteres possuem um significado especial dentro de um padrão, e devem ser escapados, caso você deseje procurá-los literalmente: <variablelist>
<varlistentry>
<term><userinput>\</userinput> (barra invertida)</term>
<listitem><para>O caractere de escape.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>^</userinput> (circunflexo)</term>
<listitem><para>Combina com o início da string.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>$</userinput></term>
<listitem><para>Combina com o fim da string.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>()</userinput> (parênteses esquerdo e direito)</term>
<listitem><para>Denota sub-padrões.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{}</userinput> (abre e fecha chaves)</term>
<listitem><para>Denota quantificadores numéricos.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>[]</userinput> (abre e fecha colchetes)</term>
<listitem><para>Denota classes de caracteres.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>]</userinput> (barra vertical)</term>
<listitem><para>OR lógico. Alternativas separadas.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>+</userinput> (sinal de 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 caractere opcional. Pode ser interpretado como um quantificador, 0 ou 1.</para></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
<sect1 id="quantifiers">
<title>Quantificadores</title>
<para><emphasis>Quantificadores</emphasis> permitem que uma expressão regular combine dentro de um número especificado ou de um intervalo de números, com um caractere, uma classe de caracteres ou um sub-padrão.</para>
<para>Os quantificadores estão dentro de chaves (<literal>{</literal> e <literal>} </literal>), e possuem como forma geral: <literal>{[mínimo-ocorrências][, [máximo-ocorrências]]}</literal> </para>
<para>O uso é melhor explicado através do exemplo: <variablelist>
<varlistentry>
<term><userinput>{1}</userinput></term>
<listitem><para>Exatamente 1 ocorrência</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{0,1}</userinput></term>
<listitem><para>Zero ou 1 ocorrência</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>No mínimo 5 e no máximo 10 ocorrências.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{5,}</userinput></term>
<listitem><para>No mínimo 5 ocorrências, sem máximo.</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>Adicionalmente, existe algumas abreviações: <variablelist>
<varlistentry>
<term><userinput>*</userinput> (asterisco)</term>
<listitem><para>igual a <literal>{0,}</literal>, procura por quaisquer número de ocorrências.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>+</userinput> (sinal de mais)</term>
<listitem><para>similar a <literal>{1,}</literal>, no mínimo 1 ocorrência.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>?</userinput> (ponto de interrogação)</term>
<listitem><para>similar a <literal>{0,1}</literal>, zero ou 1 ocorrência.</para></listitem>
</varlistentry>
</variablelist>
</para>
<sect2>
<title>Guloso</title>
<para>Ao usar os quantificadores sem máximo, as expressões regulares padronizam a combinação para o mais próximo da string procurada possível, comumente conhecido como comportamento <emphasis>guloso</emphasis>.</para>
<para>O software moderno de expressões regulares fornece o chamado <quote>desligamento</quote> do modo 'guloso', embora em um ambiente gráfico a interface fornece a você o acesso a isto. Por exemplo, um diálogo de busca, fornecendo a busca para uma expressão regular, poderia ter uma caixa chamada <quote>Combinação Mínima</quote>, bem como indicar se o 'modo guloso' é o comportamento padrão.</para>
</sect2>
<sect2>
<title>Exemplos do Contexto</title>
<para>Aqui estão alguns exemplos do uso de quantificadores</para>
<variablelist>
<varlistentry>
<term><userinput>^\d{4,5}\s</userinput></term>
<listitem><para>Combina com os dígitos em <quote>1234 ir</quote> e <quote>12345 agora,</quote> mas não combina com <quote>567 sete</quote> nem com <quote>223459 algum local</quote></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\s+</userinput></term>
<listitem><para>Combina uma ou mais vezes com caracteres de espaço em branco</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>(bla){1,}</userinput></term>
<listitem><para>Combina com todos os <quote>blablabla</quote>, e com <quote>bla</quote> em <quote>blackbird</quote> ou <quote>tabla</quote></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>/?&gt;</userinput></term>
<listitem><para>Combina com <quote>/&gt;</quote> em <quote>&lt;fecharitem/&gt;</quote> bem como com <quote>&gt;</quote> em <quote>&lt;abriritem&gt;</quote>.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 id="assertions">
<title>Afirmações</title>
<para><emphasis>Afirmações</emphasis> permitem que uma expressão regular combine com certas condições controladas.</para>
<para>Uma afirmação não precisa de um caractere para combinar, e em vez disso ela investiga as adjacentes de uma possível combinação, antes de conhecê-la. Por exemplo: a afirmação <emphasis>limite da palavra </emphasis> não tenta encontrar um caractere que não seja da palavra, oposto de uma palavra em sua posição, e ao invés disso, ele certifica-se de que não existe um caractere da palavra. Isto significa que a afirmação pode combinar onde não existe caractere, &ie;, no final de uma string procurada.</para>
<para>Algumas afirmações realmente possuem um padrão para combinar, mas a parte da string combinando não será uma parte do resultado da busca da expressão inteira.</para>
<para>As Expressões Regulares, como documentadas aqui, suportam as seguintes afirmações: <variablelist>
<varlistentry>
<term><userinput>^</userinput> (circunflexo: início de string)</term>
<listitem><para>Combina com o início da string procurada.</para> <para>A expressão <userinput>^Peter</userinput> combinará com <quote> Peter</quote> na string <quote>Peter, ei!</quote>, mas não com <quote>Ei, Peter!</quote> </para> </listitem>
</varlistentry>
<varlistentry>
<term><userinput>$</userinput> (final da string)</term>
<listitem><para>Combina com o fim da string procurada.</para>
<para>A expressão <userinput>você\?$</userinput> combinará com o 'você' no final da string <quote>É isto que deseja para você?</quote>, mas não combinará com <quote>É isto que deseja para você, certo?</quote></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>\b</userinput> (limite da palavra)</term>
<listitem><para>Combina se existir um caractere da palavra, mas não combina com o caractere de outra.</para>
<para>Isto é útil para encontrar finais de palavras, como por exemplo, finais para encontrar uma expressão inteira. A expressão <userinput>\bem\b </userinput> procurará separado por <quote>em</quote> na string <quote>Ele estava em prantos no embarque</quote>, mas não combinará, por exemplo, com o <quote>em</quote> de <quote> embarque</quote>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\B</userinput> (sem limite de palavra)</term>
<listitem><para>Combina com tudo que <quote>\b</quote> não combina.</para>
<para>Isto significa que ele combinará com string dentro de palavras. A expressão <userinput>\Em\B</userinput> combinará com <quote>embarque</quote> mas não com <quote>Ele estava em prantos</quote>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>(?=PADRÃO)</userinput> (adiante positivo)</term>
<listitem><para>Uma afirmação adiante olha na parte da string seguinte, como uma possível combinação. O 'adiante positivo' prevenirá a string de combinação , se o texto seguinte não combina com o <emphasis>PADRÃO</emphasis> da afirmação, mas o texto combinado não será incluído no resultado.</para>
<para>A expressão <userinput>carta(?=\w)</userinput> combinará com <quote>carta</quote> em <quote>cartada</quote>, mas não em <quote>O jogador deu uma cartada!</quote></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>(?!PADRÃO)</userinput> (adiante negativo)</term>
<listitem><para>O 'adiante negativo' previne que uma possível combinação seja de conhecimento, se a seguinte parte da string buscada não combina com seu <emphasis>PADRÃO</emphasis>.</para>
<para>A expressão <userinput>const \w+\b(?!\s*&amp;)</userinput> combinará com <quote>const char</quote> na string <quote>const char* foo </quote> enquanto que não combinará <quote>const QString</quote> em <quote>const QString&amp; bar</quote>, pois o <quote>&amp; </quote> combina com o padrão de afirmação negativo.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
<!-- TODO sect1 id="backreferences">
<title>Back References</title>
<para></para>
</sect1 -->
</appendix>