You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: content/publicacoes/regex/index.md
+23-4
Original file line number
Diff line number
Diff line change
@@ -19,15 +19,19 @@ Expressão regular é uma sequência de caracteres que define um padrão de pesq
19
19
20
20
Ou seja, endereços de e-mail seguem um **padrão**. O mesmo vale para telefones celulares (`DDD` + `nove dígitos numéricos`), valores monetários (`símbolo da moeda` + `valor inteiro` + `,` + `decimais`) etc.
21
21
22
-
As expressões regulares são extremamente poderosas para manipulação de textos e são amplamente utilizadas em linguagens de programação como Python, JavaScript, Java, e muitas outras. Aqui veremos com Python, mas antes de entrarmos no campo de programação, vale contar um pouco da história de _regex_...
22
+
As expressões regulares são extremamente poderosas para manipulação de textos e são amplamente utilizadas em linguagens de programação como Python, JavaScript, Java, e muitas outras. Aqui veremos com Python, mas antes de entrarmos no campo de programação, vale contar um pouco da história de _regex_.
23
+
24
+
# História
23
25
24
26
A ideia de expressões regulares surgiu na década de 1950 com o matemático norte-americano Stephen Cole Kleene que, ao lado de Alan Turing, Emil Post e outros, é conhecido como um dos fundadores da teoria da recursão.
25
27
26
28
Em dezembro de 1951, Kleene apresentou a teoria de autômatos finitos[^1]— ou seja, uma idealização sobre como máquinas simples (chamadas autômatos finitos) podem reconhecer padrões em sequências de símbolos. Ele também criou uma forma matemática de descrever esses padrões, chamada de álgebra de conjuntos regulares.
27
29
28
30
De maneira mais simples, a álgebra de conjuntos regulares define regras matemáticas que permitem combinar palavras e criar novos conjuntos de palavras, facilitando a identificação e manipulação de padrões.
29
31
30
-
Se quiser se aprofundar na matemática por trás disso, ela define operações sobre linguagens regulares (subconjuntos do conjunto $\Sigma^*$, que é o conjunto de todas as cadeias possíveis sobre um alfabeto $\Sigma$). As três operações básicas são:
Se quiser se aprofundar na álgebra de conjuntos regulares, ela define operações sobre linguagens regulares (subconjuntos do conjunto $\Sigma^*$, que é o conjunto de todas as cadeias possíveis sobre um alfabeto $\Sigma$). As três operações básicas são:
31
35
32
36
1. União ($\cup$): se $L_1$ e $L_2$ são linguagens regulares, então sua união $L_1 \cup L_2$ também é regular.
33
37
- Exemplo: Se $L_1 = \lbrace\text{"ab"}, \text{"cd"}\rbrace$ e $L_2 = \lbrace\text{"ef"}, \text{"gh"}\rbrace$, então $L_1 \cup L_2 = \lbrace\text{"ab"},\text{"cd"},\text{"ef"},\text{"gh"}\rbrace$.
@@ -36,7 +40,22 @@ Se quiser se aprofundar na matemática por trás disso, ela define operações s
36
40
3. Fechamento de Kleene ($^{\*}$): se $L$ é uma linguagem regular, então $L^*$ (todas as repetições de palavras de $L$, incluindo a cadeia vazia $\epsilon$) também é.
37
41
- Exemplo: Se $L = \lbrace\text{"a"}, \text{"b"}\rbrace$, então $L^* = \lbrace\epsilon, \text{"a"},\text{"b"},\text{"aa"},\text{"ab"},\text{"ba"},\text{"bb"},\text{"aaaa"},\text{...}\rbrace$.
38
42
39
-
Esse conceito matemático serviu de base para os primeiros algoritmos de busca computacional. Em 1968, Ken Thompson implementou expressões regulares no editor QED, que influenciou o Unix. Poucos anos depois, em 1973, ele incorporou _regex_ ao editor `ed` e ao comando `grep`, permitindo buscas avançadas em arquivos de texto. Já em 1986, Larry Wall criou a linguagem Perl, em que expressões regulares são uma ferramenta essencial. Desde então, _regex_ se popularizou e hoje é ubíquo na ciência da computação.
43
+
Uma versão mais aprofundada do teorema consta no [capítulo _Kleene's Theorem_](https://books.google.com.br/books?id=MDQ_K7-z2AMC&pg=PA97#v=onepage&q&f=false) da obra "Finite Automata", de Mark V. Lawson.
44
+
45
+
{% end %}
46
+
47
+
Esse conceito matemático serviu de base para os primeiros algoritmos de busca computacional. Em 1968, Ken Thompson implementou expressões regulares no editor QED, que influenciou o Unix[^2]. Poucos anos depois, em 1973, ele incorporou _regex_ ao editor `ed` e ao comando `grep`, permitindo buscas avançadas em arquivos de texto. Já em 1986, Larry Wall criou a linguagem Perl, em que expressões regulares são uma ferramenta essencial. Desde então, _regex_ se popularizou e hoje é ubíquo na ciência da computação.
48
+
49
+
# Conceituação
50
+
51
+
Como foi dito acima, uma expressão regular especifica um conjunto de caracteres. Essa especificação adota o nome de *padrão*. Tomemos o nome "José". Num determinado banco de dados, por exemplo, ele pode ser grafado como `José`, `Jose`, `JOSÉ`, `JOSE`, `josé`, `jose`. São seis formas diferentes que indicam o mesmo elemento e, portanto, deveriam ser padronizados.
52
+
53
+
Mas como podemos achar tais variações do mesmo elemento no nosso banco de dados? O primeiro passo é reconhecer um padrão: todas as variáveis contêm as mesmas quatro letras. Se quisermos encontrar as seis variantes, escrevemos a seguinte expressão regular:
54
+
55
+
```regex
56
+
(?i)jos[eé]
57
+
```
40
58
41
59
42
-
[^1]: Kleene, S.C. 1951. Representation of events in nerve nets and finite automata. Memorando de Pesquisa 704, Projeto Rand, Força Aérea dos Estados Unidos da América. Disponível em: [https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM704.pdf](https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM704.pdf) Acesso em: 9 fevereiro 2025.
60
+
[^1]: Kleene, S.C. 1951. Representation of events in nerve nets and finite automata. Memorando de Pesquisa 704, Projeto Rand, Força Aérea dos Estados Unidos da América. Disponível em: [https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM704.pdf](https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM704.pdf) Acesso em: 9 fevereiro 2025.
61
+
[^2]: Thompson, K. 1968. Regular expression search algorithm. Communications of the ACM vol. 11, ed. 6: 419-422. Disponível em: [https://dl.acm.org/doi/pdf/10.1145/363347.363387](https://dl.acm.org/doi/pdf/10.1145/363347.363387) Acesso em: 9 fevereiro 2025.
0 commit comments