Você está na página 1de 51

Expresses Regulares

Aurelio Jargas

http://aurelio.net
@oreio

http://aurelio.net/regex/guia

http://piazinho.com.br

Regex?
de comer?

cora[c][a]o

cora[c][a]o

cora[c][a]o

corao
coraao
coraco
coracao

(mini|super|hiper)mercado

(mini|super|hiper)mercado

(mini|super|hiper)mercado

minimercado
supermercado
hipermercado

(mini|super|hiper)?mercado

minimercado
supermercado
hipermercado
mercado

\d\d\.\d\d\d-\d\d\d

\d\d\.\d\d\d-\d\d\d

\d\d\.\d\d\d-\d\d\d

80.000-000
80.220-320
12.345-678
77.777-777

\d\d\.\d\d\d-\d\d\d
\d{2}\.\d{3}-\d{3}

80.000-000
80.220-320
12.345-678
77.777-777

\d{3}\.\d{3}\.\d{3}-\d{2}

\d{3}\.\d{3}\.\d{3}-\d{2}

\d{3}\.\d{3}\.\d{3}-\d{2}

015.010.014-55
685.706.259-13
243.287.109-71
999.999.999-99

<p>.*</p>

<p>.*</p>

<p>.*</p>

<p>Ol</p>
<p>1, 2, 3, testando...</p>
<p><b>negrito</b></p>

cora[c][a]o
(mini|super|hiper)mercado
\d\d\.\d\d\d-\d\d\d
\d{3}\.\d{3}\.\d{3}-\d{2}
<p>.*</p>

cora[c][a]o
(mini|super|hiper)mercado
\d\d\.\d\d\d-\d\d\d
\d{3}\.\d{3}\.\d{3}-\d{2}
<p>.*</p>

glob

NO
regex

Glob

Regex

*.txt

.*\.txt

[aeiou]*

[aeiou].*

musica.{mp3,wav}

musica\.(mp3|wav)

foto-??.jpg

foto-..\.jpg

Onde usar
expresses regulares?

Editores de texto

Emacs
Vim
gedit
Kate
Sublime Text
Atom
TextMate
Notepad++

IDE, Office

Android Studio
Eclipse
Xcode
Visual Studio

LibreOffice
Google Planilhas
Microsoft Word

Linha de comando

Bash
grep
sed
awk
find
PowerShell
# Usurios com ID de 5 dgitos e shell Bash
egrep '^.*:x:[0-9]{5}:.*bash$' /etc/passwd

Servidores HTTP
Apache
Nginx

# Usar URLs amigveis em vez de query strings feiosas


#
De: http://example.com/produto/1234/info
# Para: http://example.com/produto.php?id=1234&action=info
RewriteEngine on
RewriteRule "^/(\w+)/(\d+)/(\w+)$" /$1.php?id=$2&action=$3

Bancos de dados

MySQL
MariaDB
PostgreSQL
SQLite
Oracle

-- Listar veculos com placas fora do padro AAA-9999


SELECT * FROM veiculos
WHERE placa NOT REGEXP '^[A-Z]{3}-\d{4}$';

Linguagens de programao

C
C#
C++
Delphi
Go
Haskell
Java
JavaScript
Lua

Objective-C
Perl
PHP
Python
R
Ruby
Scala
Tcl
Visual Basic

// JavaScript, trechos de cdigo do MiGuXeiToR :)


// Remove acentuao
t = t.replace(/[]/gi, 'a');
t = t.replace( /[]/gi, 'e');
t = t.replace( /[]/gi, 'i');
t = t.replace(/[]/gi, 'o');
t = t.replace( /[]/gi, 'u');
// por qu, porqu, porque, por que -> pq
t = t.replace(/\bpor\s?qu[e]/gi, 'pq');
// ento -> entaum, no -> naum
t = t.replace(/o\b/gi, 'aum');

<!-- Expresses regulares no HTML5 -->


<form name="cadastro1">
CEP:
<input type="text" name="cep" pattern="\d{2}\.\d{3}-\d{3}">
<input type="submit">
</form>

Substituio
replace

Voc votou no PV, PSC, PSOL ou PSTU?

Procure por:
Troque por:

P[A-Z]+
XX

Voc votou no XX, XX, XX ou XX?

Oi, tudo bem?


Tudo bem.
Procure por:
Troque por:

(.*)
$1
Oi, tudo bem?
Tudo bem.

Tenho muito a dizer!


Mas no lembro agora...
Procure por:
Troque por:

(n[a]o)
<b>$1</b>

Tenho muito a dizer!


Mas <b>no</b> lembro agora...

12:34
23:59
Procure por:
Troque por:

(\d\d):(\d\d)
$1 horas e $2 minutos

12 horas e 34 minutos
23 horas e 59 minutos

80220320
87654321
Procure por:
Troque por:

(\d{2})(\d{3})(\d{3})
$1.$2-$3
80.220-320
87.654-321

80.220-320
12.345-678
Procure por:

[^0-9]

Troque por:

80220320
12345678

2015-10-14
1999-12-31
Procure por:
Troque por:

(\d{4})-(\d{2})-(\d{2})
$3/$2/$1
14/10/2015
31/12/1999

Legvel
Complexo

Casar uma data: dd/mm/aaaa

../../....

\d{2}/\d{2}/\d{4}

[0123][0-9]/[01][0-9]/[12][0-9]{3}

(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[12][0-9]{3}

((0[1-9]|[12][0-9])/02|(0[1-9]|[12][0-9]|30)/(0[469]|11)
|(0[1-9]|[12][0-9]|3[01])/(0[13578]|1[02]))/[12][0-9]{3}

Expresso Regular
pode no ser
a melhor soluo

((0[1-9]|[12][0-9])/02|(0[1-9]|[12][09]|30)/(0[469]|11)|(0[1-9]|[12][0-9]|3
[01])/(0[13578]|1[02]))/[12][0-9]{3}
31 dias

Ano bissexto

12 meses

Feriados

Ano 1000 a 2999

Dias teis

Fevereiro at 29

# Python
import datetime
datetime.datetime.strptime(
"31/12/1999",
"%d/%m/%Y"
)

Validar e-mail com regex


.*@.*
[^@]+@[^@]+
[A-Za-z0-9_.-]+@[A-Za-z0-9_.]+
[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,6}

Validar e-mail com regex


.*@.*
[^@]+@[^@]+
[A-Za-z0-9_.-]+@[A-Za-z0-9_.]+
[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,6}

zzz@zzz.zzz

foo@example.com

no existe

ningum l

asdf@gmail.com
outro l

Validar e-mail com regex


.*@.*
[^@]+@[^@]+
[A-Za-z0-9_.-]+@[A-Za-z0-9_.]+
[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,6}

Mande um e-mail de confirmao

Onde praticar?
http://regexpal.com
http://regex101.com

Você também pode gostar