Chapter 16. Expressões regulares

1. Ferramentas e exemplos de uso das Regex

As expressões regulares (conhecidas como regex) usadas em buscas e regras de segmentação são aquelas suportadas pelo Java. Caso você precise de mais informações específicas, consulte o Documentação Java Regex. Veja outras referências e exemplos a seguir.

Note

Este capítulo é orientado para usuários avançados que desejam definir suas próprias variantes de regras de segmentação, ou planejar itens de chave de busca mais complexos.

Table 16.1. Regex - Marcações

A construção … corresponde ao seguinte
(?i) Ativa correspondências que ignoram maiúsculas e minúsculas (por predefinição, o padrão faz a distinção entre maiúsculas e minúsculas).

Table 16.2. Regex - Caractere

A construção … corresponde ao seguinte
x O caractere x, exceto o seguinte…
\uhhhh O caractere com valor hexadecimal 0xhhhh
\t O caractere de tabulação ('\u0009')
\n O caractere de nova linha (alimentação de linha) ('\u000A')
\r O caractere de retornar ao início da linha ('\u000D')
\f O caractere de alimentar formulário ('\u000C')
\a O caractere de alerta (sino) ('\u0007')
\e O caractere escape ('\u001B')
\cx O caractere de controle corresponde ao x
\0n O caractere com valor octal 0n (0 <= n <= 7)
\0nn O caractere com valor octal 0nn (0 <= n <= 7)
\0mnn O caractere com valor octal 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh O caractere com valor hexadecimal 0xhh

Table 16.3. Regex - Citação

A construção … corresponde ao seguinte
\ Nothing, but quotes the following character. Isso é necessário se você quiser inserir quaisquer metacaracteres !$()*+.&lt;&gt;?[ \\ ]^{|} para casar como eles próprios.
\\ Por exemplo, este é um caractere de barra invertida
\Q Nada, mas escapa todos os caracteres até \E
\E Nada, mas finaliza o escape iniciado pelo \Q

Table 16.4. Regex - Classes para blocos e categorias do Unicode

A construção … corresponde ao seguinte
\p{InGreek} Um caractere no bloco Grego (bloco único)
\p{Lu} Uma letra maiúscula (categoria única)
\p{Sc} Um símbolo de moeda
\P{InGreek} Qualquer caractere, exceto um no bloco Grego (negação)
[\p{L}&&[^\p{Lu}]] Qualquer letra, exceto letra maiúscula (subtração)

Table 16.5. Regex - Classes de caracteres

A construção … corresponde ao seguinte
[abc] a, b, ou c (classe simples)
[^abc] Qualquer caractere exceto a, b, ou c (negação)
[a-zA-Z] a até z ou A até Z, inclusive (intervalo)

Table 16.6. Regex - Classes de caracteres predefinidos

A construção … corresponde ao seguinte
. Qualquer caractere (exceto para fim de linha)
\d Um dígito: [0-9]
\D Um caractere que não seja dígito: [^0-9]
\s Um caractere de espaço em branco: [ \t\n\x0B\f\r]
\S Um caractere que não seja de espaço em branco: [^\s]
\w Um caractere de palavra: [a-zA-Z_0-9]
\W Um caractere que não seja de palavra: [^\w]

Table 16.7. Regex - Correspondentes de limite (borda)

A construção … corresponde ao seguinte
^ O início de uma linha
$ O final de uma linha
\b Limite de uma palavra
\B Limite que não seja de palavra

Table 16.8. Regex - Quantificadores gulosos

A construção … corresponde ao seguinte
X? X, uma única vez ou nenhuma
X* X, zero ou mais vezes
X+ X, uma ou mais vezes

Note

os quantificadores gulosos farão o maior número de correspondências possíveis. Por exemplo, a+? casará aaa em aaabbb

Table 16.9. Regex - Quantificadores não-gulosos

A construção … corresponde ao seguinte
X?? X, uma única vez ou nenhuma
X*? X, zero ou mais vezes
X+? X, uma ou mais vezes

Note

os quantificadores não gulosos farão o menor número de correspondências possíveis. Por exemplo, a+? casará o primeiro a em aaabbb

Table 16.10. Regex - Operadores lógicos

A construção … corresponde ao seguinte
XY X seguido por Y
X|Y Ou X ou Y
(XY) XY como um grupo único

1. Ferramentas e exemplos de uso das Regex

Diversas ferramentas interativas estão disponíveis para desenvolver e testar as expressões regulares. Em geral, elas seguem muito o mesmo padrão (para um exemplo do testador de expressões regulares veja abaixo): a expressão regular (mostrada no topo) analisa o texto de pesquisa (caixa de texto no meio), e gera os hits, mostrados na caixa de resultados.

Figure 16.1. Testador das Regex

Testador das Regex

Veja The Regex Coach para as versões Windows, Linux, FreeBSD de ferramenta autônoma. This is much the same as the above example.

Uma boa coleção de casos de regex úteis pode ser encontrada no próprio OmegaT (veja Opções > Segmentação). A seguinte lista inclui expressões que podem ser úteis na busca em memória de tradução:

Table 16.11. Regex - Exemplos de expressões regulares em traduções

Expressão regular Encontra o seguinte:
(\b\w+\b)\s\1\b palavras duplicadas
[\.,]\s*[\.,]+ vírgula ou ponto final, seguido de espaçoes e novamente vírgula ou ponto final
\. \s+$ espaços extras, após o ponto no fim da linha
\s+a\s+[aeiou] Inglês: palavras, começando com vogais, que deveriam sempre ser precedidas por "an" e não "a"
\s+an\s+[^aeiou] Inglês: a mesma verificação acima, porém a respeito de consoantes ("a", não "an")
\s{2,} mais de um espaço
\.[A-Z] Ponto final, seguido por um caractere maiúsculo - possivelmente um espaço está faltando entre o ponto final e o início de uma nova sentença?
\bis\b procura por "is", e não "this" ou "isn't", etc.