Expressões Regulares: modificadores

Galerinha! Firmose?

Sempre me deparo com situações que precisam de expressões regulares que contenham modificadores. O problema é que não é todo mundo que sabem que eles existem.

Vamos pegar um exemplo bem comum: expressões regulares "case-insensitive" (que combinam com maiúsculas e minúsculas). Vamos imaginar que queremos pegar uma palavra qualquer. Poderíamos usar o seguinte:

Regex rx = new Regex("[A-ZÀ-Ý]+");

Analisando a expressão regular, temos:

  • []+ - um grupo de caracteres, com uma ou mais incidências;
  • A-Z - os caracteres de A a Z;
  • À-Ý - os caracteres de À a Ý (contém todos os caracteres acentuados, inclusive o "Ç").

Isso fucionaria, certo? Depende.

Se você usar a palavra "TEXTO", a expressão regular vai combinar e teremos um Match. Já se você usar a palavra "Texto", a expressão regular vai combinar somente com o "T".

Temos 3 formas de resolver isso: ou adicionamos os caracteres em mínusculo na expressão regular, o que resultaria em:

Regex rx = new Regex("[A-ZÀ-Ýa-zà-ý]+");

Ou adicionamos o modificador (?i) na expressão regular:

Regex rx = new Regex("(?i)[A-ZÀ-Ý]+");

Ou adicionamos o parametro RegexOptions para ignorar o casing da expressão:

Regex rx = new Regex("[A-ZÀ-Ý]+", RegexOptions.IgnoreCase);

Agora sim, tanto "TEXTO" quanto "Texto" irão combinar com a expressão regular.

Assim sendo, veja os modificadores mais utilizados:

  • "(?i) ou RegexOptions.IgnoreCase - ignora se a letra é maiúscula ou minúscula;
  • "(?s)" ou RegexOptions.Singleline - trata um texto como linha única, ignorando os pulos de linha (\r\n) do texto;
  • "(?m)" ou RegexOptions.Multiline - o contrário do acima: trata um texto como multilinha, levando em consideração os pulos de linha (\r\n) dentro do texto;

No caso dos modificadores na expressão, se você quiser que apenas um grupo de caracteres seja modificado, circule o grupo com parêntesis. Veja:

Regex rx = new Regex("[A-ZÀ-Ý]((?i)[A-ZÀ-Ý]+)");

No caso acima, a expressão regular irá combinar com "TESTE" e com "Teste", mas não com "teste".

Você pode utilizar os modificadores sempre que necessário, adaptando-os às suas necessidades. Mas cuidado para não exagerar!

Muita paz!

Comentários