[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