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/05 02:12] – [Expressões regulares] link para glossário (linguagem específica) hrcerqprog:regex [2025/04/16 14:31] (atual) – edição externa 127.0.0.1
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 44: Linha 89:
  
 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]]. 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 59: 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.1733364776.txt.gz · Última modificação: (edição externa)