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.
Tutorial Microsoft: https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
Tutorial Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
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');
Abaixo algumas regular expressions úteis e o código para utilização em C#
Regex:
<[^>]*>
Código C#:
string ret = System.Text.RegularExpressions.Regex.Replace(html, @"<[^>]*>", String.Empty);
Regex:
[^0-9]+?
Código c#:
string ret = System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9]+?", string.Empty);
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/
Código C#:
System.Text.RegularExpressions.Regex.Matches("aaa{111}ccc{222}", @"\{(\w)*\}")
Considerações:
Exemplo:
Código C#:
var match = Regex.Match(line, @"\scelular\s(.*)\s");
if (match.Success)
var proximaPalavra = match.Groups[1].Value;
Exemplo:
Código C#:
if (Regex.IsMatch("abacaxi manga morango", "manga"))
{
//Está no texto
}
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");
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