Slackjeff Wiki

Juntando bits aprendemos juntos

Ferramentas do usuário

Ferramentas do site


prog:regex

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
prog:regex [2024/12/02 01:47] – [Implementações] implementações de python e java hrcerqprog:regex [2025/04/16 14:31] (atual) – edição externa 127.0.0.1
Linha 7: Linha 7:
 E que algo é esse? No caso das expressões regulares, esse algo são caracteres. Ou seja, dentro de um conjunto arbitrário de caracteres, podem existir determinados padrões, mais especificamente, combinações de caracteres que estão conforme um padrão. E que algo é esse? No caso das expressões regulares, esse algo são caracteres. Ou seja, dentro de um conjunto arbitrário de caracteres, podem existir determinados padrões, mais especificamente, combinações de caracteres que estão conforme um padrão.
  
-Existe uma sintaxe a ser usada para formular expressões, e nesse sentido podemos dizer que expressões regulares são uma //linguagem específica de domínio//. Porém não há apenas uma sintaxe: existem diferentes especificações, e diferentes implementações de interpretadores de expressão regular.+Existe uma sintaxe a ser usada para formular expressões, e nesse sentido podemos dizer que expressões regulares são uma //[[prog:glossario#l|linguagem específica de domínio]]// :?:. Porém não há apenas uma sintaxe: existem diferentes especificações, e diferentes implementações de interpretadores de expressão regular.
  
 ===== Aplicabilidade ===== ===== Aplicabilidade =====
Linha 16: Linha 16:
  
 Se quiser pesquisar por um nome ou CPF específico em um texto, é fácil, basta procurar por uma ocorrência dele. Mas se quiser procurar qualquer nome próprio ou qualquer CPF, você precisa expressar essa pesquisa como um padrão a ser procurado. É aí que expressões regulares são úteis. Elas proveem uma sintaxe para definir o padrão de pesquisa. Se quiser pesquisar por um nome ou CPF específico em um texto, é fácil, basta procurar por uma ocorrência dele. Mas se quiser procurar qualquer nome próprio ou qualquer CPF, você precisa expressar essa pesquisa como um padrão a ser procurado. É aí que expressões regulares são úteis. Elas proveem uma sintaxe para definir o padrão de pesquisa.
 +
 +
 +===== Sintaxe =====
 +
 +Para escrever expressões regulares, você precisa compreender a sintaxe dessas expressões. Existem diversos símbolos e combinações desses símbolos, cada qual com seu significado. A sintaxe varia um pouco, em alguns aspectos, a depender do [[#padronizacao|padrão]] utilizado, mas também possui muitos aspectos comuns a todos eles.
 +
 +Algumas expressões são extremamente simples, outras são praticamente ilegíveis de tão complexas. Tudo depende de quão precisa você quer que seja a expressão, e das situações em que pretende aplicar a expressão.
 +
 +Nas subseções a seguir você verá os principais elementos que precisa saber sobre essa sintaxe.
 +
 +==== Literais ====
 +
 +...
 +
 +==== Caracteres reservados ====
 +
 +...
 +
 +==== Classes ====
 +
 +...
 +
 +=== Classes pré-definidas ===
 +
 +...
 +
 +==== Quantificadores ====
 +
 +...
 +
 +==== Âncoras ====
 +
 +...
 +
 +==== Alternativas ====
 +
 +...
 +
 +==== Grupos ====
 +
 +...
 +
 +=== Capturas e referências ===
 +
 +...
  
 ===== História ===== ===== História =====
Linha 25: Linha 70:
 Expressões regulares são padronizadas? Sim e não. Explico. Ocorre que existe mais de um padrão, o que na prática pode ser entendido como ausência de padrão. Alguns padrões são mais conhecidos e utilizados, e outros menos. Expressões regulares são padronizadas? Sim e não. Explico. Ocorre que existe mais de um padrão, o que na prática pode ser entendido como ausência de padrão. Alguns padrões são mais conhecidos e utilizados, e outros menos.
  
-Um dos padrões mais conhecidos é o **POSIX**, que prevê duas formas de expressão regular: //básicas// e //estendidas//. Ambas são descritas nas seguintes revisões:+Um dos padrões mais conhecidos é o **POSIX**, que prevê duas formas de expressão regular: básicas (//Basic Regular Expressions//, ou **BRE**) estendidas (//Extended Regular Expressions//, ou **ERE**). Ambas são descritas nas seguintes revisões:
  
   * [[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap09.html|2024]]   * [[https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap09.html|2024]]
Linha 42: Linha 87:
  
 Por fim, temos também a especificação do **ECMAScript** ([[https://262.ecma-international.org/|ECMA 262]]), que é aplicável a implementações da linguagem Javascript. Por fim, temos também a especificação do **ECMAScript** ([[https://262.ecma-international.org/|ECMA 262]]), que é aplicável a implementações da linguagem Javascript.
 +
 +Além dos padrões que detalham a interpretação de expressões, de modo geral, existe ainda o padrão **Unicode Regular Expressions** ([[https://www.unicode.org/reports/tr18/|UTS#18]]), que trata sobre a adequação de motores de expressão regular ao padrão [[https://www.unicode.org/versions/latest/|Unicode]].
 +
 ===== Implementações ===== ===== Implementações =====
  
Linha 57: Linha 105:
  
 As implementações presentes em Python (módulo [[https://docs.python.org/3/library/re.html|re]]) e Java (classe [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html|Pattern]]) também se descrevem como inspiradas em Perl, porém ambas com suas próprias particularidades. As implementações presentes em Python (módulo [[https://docs.python.org/3/library/re.html|re]]) e Java (classe [[https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html|Pattern]]) também se descrevem como inspiradas em Perl, porém ambas com suas próprias particularidades.
-===== Sintaxe ===== 
  
-...+Outro exemplo interessante é o da biblioteca [[https://www.boost.org/|Boost]] (C++), cujo módulo de expressões regulares, [[http://www.boost.org/libs/regex/doc/html/|BoostRegex]], prevê o uso de dois padrões: POSIX (tanto a variante básica como a estendida) e Perl (que é utilizada por padrão). 
 + 
 +Ainda outro caso curioso é o da biblioteca [[https://www.gnu.org/software/gnulib/manual/html_node/index.html|Gnulib]], que possibilita a escolha entre alguns [[https://www.gnu.org/software/gnulib/manual/html_node/Predefined-Syntaxes.html|padrões pré-definidos]] (incluindo as variantes POSIX), mas também uma [[https://www.gnu.org/software/gnulib/manual/html_node/Syntax-Bits.html|combinação]] arbitrária de elementos da sintaxe. 
 + 
 +E esta não é uma lista exaustiva (como dificilmente poderia ser). Você pode querer conferir a tabela comparativa [[https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines|na Wikipedia]] (em inglês). 
 + 
 +<note important> 
 +Tenha em mente que algumas das bibliotecas citadas nesse comparativo da Wikipedia podem já ter sido descontinuadas. 
 +</note>
  
 ===== Outros materiais ===== ===== Outros materiais =====
prog/regex.1733104038.txt.gz · Última modificação: (edição externa)