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:
Analisando a expressão regular, temos:
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:
Ou adicionamos o modificador (?i) na expressão regular:
Ou adicionamos o parametro RegexOptions para ignorar o casing da expressão:
Agora sim, tanto "TEXTO" quanto "Texto" irão combinar com a expressão regular.
Assim sendo, veja os modificadores mais utilizados:
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:
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!
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
Postar um comentário