[Expressões regulares]

@brunomacabeusbr

@lukkascost

#pylestra

Autores

Bruno Macabeus

Isabel Frota

Lucas Costa

Histórico

Originada na década de 50, com o estudo do matemático Stephen Cole Kleene

Primeiras implementação, ainda primitivamente, em SNOBOL, na década de 60

Primeira grande implementação em Perl, na década de 80

Automato

Metacaracteres

/abc/
/abc/

foo abaju abc

/abc/

foo abaju abc

/menin./

merenda menino menina meninq

/menin[ao]/

menino menina meninq meninos

/menin[ao]s?/

menino meninos meninop

/0*42/

42 042 00042 0x42

/sim+/

si sim simmm simmxmm

[^abc]

(?:abc)

a{3,5}

\1

abc|foo

\w

\d

[0-9]

$

ˆ

/abc/

/menin./
/menin[ao]/
/menin[ao]s?/
/0*42/
/sim+/

Quando usar?

Buscas em textos

Busca em bancos de dados

Interpretações da entrada enviada pelo usuário

Como usar?

Cada linguagem e software implementa de forma diferente as expressões regulares

Perl

Recebe como entrada uma string com o seguinte formato:

soma <number1> <number2>
menos <number1> <number2>

Se fornecer soma, somará number1 com number2. Se fornecer menos, subtrairá number1 com number2.

#!/usr/bin/perl
use strict;
use warnings;

print('Envie seu comando: ');
chomp(my $input = <>);

my ($command, $number1, $number2) = $input =~ /^(\w+)\s+(\d+)\s+(\d+)$/;
if ($command eq 'soma') {
  print($number1 . ' + '. $number2 . ' = ' . ($number1 + $number2) . "\n");
} else {
  print($number1 . ' - '. $number2 . ' = ' . ($number1 - $number2) . "\n");
}
print('Envie seu comando:')
command, number1, number2 = string.match(io.read(), '(%w+)%s+(%d+)%s+(%d+)')

if command == 'soma' then
  print(number1, '+', number2, '=', number1 + number2)
else
  print(number1, '-', number2, '=', number1 - number2)
end

Lua

Recebe como entrada uma string com o seguinte formato:

soma <number1> <number2>
menos <number1> <number2>

Se fornecer soma, somará number1 com number2. Se fornecer menos, subtrairá number1 com number2.

import Foundation

print("Envie seu comando")
let input = readLine(strippingNewline: true)!
let regexp_command = try! NSRegularExpression(pattern: "(\\w+)\\s+(\\d+)\\s+(\\d+)",
                                              options: [])
let matches = regexp_command.matches(
                in: input, options: [],
                range: NSRange(location:0, length: input.characters.count)
              )

let command = (input as NSString).substring(with: (matches.first?.rangeAt(1))!)
let number1 = Int((input as NSString).substring(with: (matches.first?.rangeAt(2))!))!
let number2 = Int((input as NSString).substring(with: (matches.first?.rangeAt(3))!))!

if command == "soma" {
    print(number1, "+", number2, "=", number1 + number2)
} else {
    print(number1, "-", number2, "=", number1 - number2)
}

Swift

Recebe como entrada uma string com o seguinte formato:

soma <number1> <number2>
menos <number1> <number2>

Se fornecer soma, somará number1 com number2. Se fornecer menos, subtrairá number1 com number2.

import re

input_value = input('Envie seu comando: ')
regexp_command = re.compile(r'^(\w+)\s+(\d+)\s+(\d+)$')
command, number1, number2 = regexp_command.search(input_value).groups()

number1 = int(number1)
number2 = int(number2)

if command == 'soma':
    print(number1, '+', number2, '=', number1 + number2)
else:
    print(number1, '-', number2, '=', number1 - number2)

Python

Recebe como entrada uma string com o seguinte formato:

soma <number1> <number2>
menos <number1> <number2>

Se fornecer soma, somará number1 com number2. Se fornecer menos, subtrairá number1 com number2.

Ferramentas online

https://jex.im/regulex/

https://regex101.com/

Para saber mais...

Livro Expressões Regulares - Uma abordagem divertida

Artigo Regular Expression Matching Can Be Simple And Fast

https://goo.gl/tZC3II

Blog Macalogs

www.macalogs.com.br

Expressões regulares (Pylestra)

By brunomacabeus

Expressões regulares (Pylestra)

  • 1,033