Skip to content

Commit 2b7215c

Browse files
committed
Changed regex text
1 parent 76b7acf commit 2b7215c

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

content/publicacoes/regex/index.md

+23-4
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,19 @@ Expressão regular é uma sequência de caracteres que define um padrão de pesq
1919

2020
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.
2121

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
2325

2426
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.
2527

2628
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.
2729

2830
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.
2931

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:
32+
{% note(clickable=true, hidden=true, header="Explicação matemática") %}
33+
34+
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:
3135

3236
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.
3337
- 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
3640
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 é.
3741
- 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$.
3842

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+
```
4058

4159

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.

sass/parts/_code.scss

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
$language-colors: (
1818
"js": (#f7df1e, "JavaScript"),
1919
"resultado": (#333, "Resultado"),
20+
"regex": (#777bb4, "Regex"),
2021
"yaml": (#f71e6a, "YAML"),
2122
"shell": (#4eaa25, "Shell"),
2223
// Updated to a more specific green shade

syntaxes/Regex.sublime-syntax

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
%YAML 1.2
2+
---
3+
# See http://www.sublimetext.com/docs/syntax.html
4+
name: Regex
5+
file_extensions:
6+
- regex
7+
scope: source.regex
8+
9+
contexts:
10+
main:
11+
- match: ''
12+
scope: text.plain

0 commit comments

Comments
 (0)