Uma regex bem montada pode ser de grande ajuda para o processo de refactor, e manutenção de código. Principalmente quando as ferramentas disponíveis nas IDEs, não atendem um caso específico.
Possíveis utilizações:
- Remoção de código desnecessário.
- Métodos Get e Set.
- Métodos vazios.
- Métodos que chamam apenas a herança.
- Remoção de código comentado.
- Checagem e remoção de comandos que possam gerar erro.
- Blocos a serem refactorados.
- Substituição de Macros.
- Troca de ordem de parâmetros.
Características e comandos regex
Caracteres especiais
Permite pesquisar mais do que simples caracteres \ ^$ . | ? * + ( ) [ {
Modes Modifiers
Inclua os modificadores no início da regex Coloque todos juntos para especificar múltiplos modificadores. Ex. (?ismx)
(?i)case insensitive(?x)habilita modo free-spacing(?s)single line mode (dot match \r\n)
Caracteres não impressos
Permite pesquisar por caracteres não visuais
\tTab\rCarriage Return\nLine Feed\aBell\eEscape\fForm Feed\vVertical Tab\cAControl+A (ASCII Control de A-Z)\u20ACUnicode\x{20AC}Unicode
Shorthand de classes de caracteres
Representação “abreviada” de uma classe de caracteres geralmente utilizada
\b [0-9]Dígito\w [A-Za-z0-9_]Palavra de caractere\s [ \t\r\n\f]Espaço em branco\D [^\d]Exceto Dígito\W [^\w]Exceto Palavra de caractere\S [^\S]Exceto Espaço em branco
Metacarcteres dentro de classe de caracteres
[+*]combina + ou *[\\x]combina \ ou x[x^]combina x ou ^[]x]combina ] ou x[^]x]nega a combinação de ] ou x[-x] [x-]combina x ou –[^-x] [^x-]nega a combinação de x ou –
Backreferences
Combina o mesmo texto previamente encontrado e capturado pelo grupo indicado
<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>
Testing <B><I>bold italic</I></B> text
([abc]+)=\1 Combina com cab=cab
([abc])+=\1 Não comnina com cab=cab
Suporta até 99 grupos Parêntesis e back-reference não podem ser usados dentro de classe de caracteres Útil para remover palavras duplicadas \b(\w+)\s+\1\b Meu cão cão é grande É possível nomear os grupos capturados.
(?<name>grupo) \k<name> <(?<tag>[A-Z][A-Z0-9]*)\b[^>]*>.*?</\k<tag>>
Alternação
Semelhante a classe de caracteres Combina um regex de um conjunto de regex A ordem importa
cat|dog
cat|dog|mouse|fish
\b(cat|dog\b
\bcat|dog\b
\b(mais|de|seja)\b
Caracteres literais
Um ou mais caracteres sem função espacial a Jack is a boy cat About cats and dogs Observações 1ª ocorrência a esquerda Limites da palavra (word boundaries) Pesquisar próximo
Lookaround
“Olha” para os lados sem consumir Lookahead
q(?!u) não é o mesmo que q[^u]
q(?=u) quit
Lookbehind
(?<!a)b cab bed debt
(?<=a)b cab bed debt
Repetições
Exemplos:
<.+> This is a <EM>first</EM> test
<.+?> This is a <EM>first</EM> test
<[^>]+> Alternativa sem backtracking
\b[1-9][0-9]{3}\b nº entre 1000 e 9999
Repetições
Indica a quantidade dde repetições do token precedente na regex. Obs: todos greedy * * 0 ou mais vezes * + 1 ou mais vezes * ? 0 ou 1 vezes * {n} Exatamente n vezes * {n,} n ou mais vezes * {n,m} no mínimo n e no máximo m vezes
Itens opcionais
Torna opcional o token precedente Greedy por padrão Use ? para tornar Lazy
colou?r combina com color ou colour
Nov(ember)? combina com Noc ou November
Feb 23(rd)? Today is Feb 23rd, 2003
Feb 23(rd)?? Today is Feb 23rd, 2003
Âncoras
Âncoras não combinam com nenhum caractere, em vez disso, combinam com a posição antes, depois, ou entre caracteres
^começo da linha\Acomeço do arquivo$final da linha\Zfinal do arquivo- Limites de palavra (is This island is beautiful)
\bis This island is beautiful is\b This island is beautiful \bis\b This island is beautiful \B Versão negada de \b
Classes ou conjuntos de caracteres
Combina apenas um caractere do conjunto A ordem não importa
Metacaracteres ] \ ^ -
Sou[zs]a combina com Souza ou Sousa
gr[ae]y combina com gray ou grey
[0-9] único dígito entre 0 e 9
[A-Za-z] única letra entre A e Z ou a e z
[^0-9\r\] qualquer caractere exceto dígito e quebra de linha
Branch Reset Groups
Permite compartilhar o mesmo grupo de captura dentro de um branch Sintaxe (?|regex)
(?|(a)|(b)|(c))\1 aa ou bb ou cc
Free-Spacing
No modo free-spacing, espaço em branco, tabulações e quebra de linhas entre os tokens da Regex são ignorados Também é possível adicionar comentários
(?>atomic) (?> ato mi c)
Agrupamento e Captura
Coloque entre parêntesis parte da regex para agrupar e capturar a combinação Permite aplicar quantificadores para o grupo ou restringir a alteração da parte da regex
(\d\d)/(\d\d)/(\d{4}) 02/25/1982
\2-\1-\3 25/02/1982
Set(?:Value)? Sem captura(otimizado)
Ponto
Combina com “quase” qualquer caractere Não combina com quebra de linha Alguns editores permitem seleciona a opção para combinar com quebra de linha (não padrão) Se não houver opção, use a classe de caracteres [\s\S]
Softwares
- grep
- PowerGREP
- RegexBuddy
- RegexMagic
- SGBDs (Oracle, PostgreSQL, MySQL)