Referência rápida de Regular Expressions


Índice

Sobre Regular Expressions

Regulas Expressions (ou regex ou regexp) são uma sequencia de caracteres que especificam um padrão de busca.

Alguns exemplos de uso de Regular Expressions, são:

O conceito de regular expressions começou nos anos 1950, quando o matemático americano Stephen Cole Kleene descreveu formalmente uma linguagem regular.


Referências


Hello World

Regular expressions são aceitos por muitas linguages como: C#, Java, GO, Javascript, etc.

Um jeito fácil para testar regular expressions é utilizando Javascript e o seu browser. Abra o Chrome e pressione F12, será exibido o console do navegador. No console digite a expressão abaixo e então pressione ENTER.

Alguns exemplos de Regular Expressions para começar:

Pesquisar se tem a palavra “manga” no texto:

const re = new RegExp('manga');
re.test('tem manga na barraca da feira'); 	//true
re.test('tem abacaxi na barraca da feira'); //false

Substituir a palavra manga por banana:

const re = new RegExp('manga');
'tem manga na barraca da feira'.replace(re, 'banana');

Exemplos

Abaixo algumas regular expressions úteis e o código para utilização em C#

Remover todos os caracteres HTML de uma string

Regex:

<[^>]*>

Código C#:

string ret = System.Text.RegularExpressions.Regex.Replace(html, @"<[^>]*>", String.Empty);

Obter caracteres numéricos de uma string

Regex:

[^0-9]+?

Código c#:

string ret = System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9]+?", string.Empty);

Substituir caracteres especiais de uma string

Código C#:

string ret = System.Text.RegularExpressions.Regex.Replace(ret, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ]+?", string.Empty);

Para permitir espaços adicione: \s:

string ret = System.Text.RegularExpressions.Regex.Replace(ret, @"[^0-9a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄçÇ\s]+?", string.Empty);

Veja um exemplo em C# no seguinte artigo: /csharp/remover-caracteres-especiais-e-acentuacao-com-regular-expression-e-csharp/

Listar todos os caracteres de uma string entre chaves “{xxx}”

Código C#:

System.Text.RegularExpressions.Regex.Matches("aaa{111}ccc{222}", @"\{(\w)*\}")

Considerações:

Exemplo:

Próxima palavra depois de uma palavra e um espaço

Código C#:

var match = Regex.Match(line, @"\scelular\s(.*)\s");
if (match.Success)
    var proximaPalavra = match.Groups[1].Value;

Exemplo:

Pesquisar se uma palavra está no texto:

Código C#:

if (Regex.IsMatch("abacaxi manga morango", "manga"))
{
  //Está no texto
}

Pesquisar duas palavras dentro do texto, utilizando case insensitive

A RegularExpression abaixo verifica se a string contém as palavras “cpf” e “duplicado”:

var regex = System.Text.RegularExpressions.Regex(@"^(?i)(?=.*\bcpf\b)(?=.*\bduplicado\b).*$");
regex.IsMatch("Teste CPF dkdkdkdk duplicado no sistema");

RegEx Named Capture Groups

Em Javascript a partir do ES2018 há suporte para Named Capture Groups.

Ao invés de utilizar assim:

const re = /(\d{4})-(\d{2})-(\d{2})/;
const match = re.exec('2021-03-04');
console.log(match[1]);  //2021
console.log(match[2]);  //03
console.log(match[3]);  //04

É possível nomear os grupos:

const re = /(?<year>\d{4})-(?<onth>\d{2})-(?<day>\d{2})/;
const match = re.exec('2021-03-04');
console.log(match.groups.year);  //2021
console.log(match.groups.month);  //03
console.log(match.groups.day);  //04

Aliás, também é possível capturar os grupos utilizando Javascript destructuring assignment:

const re = /(\d{4})-(\d{2})-(\d{2})/;
const [match, year, month, day] = re.exec('2021-03-04');
console.log(year);  //2021
console.log(month);  //03
console.log(day);  //04

Comentários