Sintaxe da Expressão Regular 2 (re2.h)

As expressões regulares são uma notação para descrever os conjuntos de cadeias de caracteres. Quando uma cadeia de caracteres está no conjunto descrito por uma expressão regular, dizemos que a expressão regular corresponde à cadeia de caracteres.

A expressão regular mais simples é um único caractere literal. Exceto pelos metacaracteres, como *+?()|, os caracteres correspondem a si próprios. Para corresponder a um metacaracter, escape-o com uma barra de fundo. Por exemplo, \+ corresponde ao caractere literal plus.

Duas expressões regulares podem ser alteradas ou concatenadas para formar uma nova expressão regular: se e 1 corresponde a s e e2 corresponde a t, e1 | e2 partidas s ou t, e 1e2correspondências st.

Os metacaracters *, e +? são operadores de repetição: e1* corresponde a uma sequência de cadeias de caracteres zero ou mais (possivelmente diferentes), cada uma das quais correspondem a e1; e1+ corresponde a um ou mais; e1? corresponde a zero ou um.

A precedência do operador, da associação mais fraca à mais forte, é a seguinte:

  • Alternância
  • Concatenação
  • operadores de repetição

Parênteses explícitos podem ser usados para forçar diferentes significados, como em expressões aritméticas. Alguns exemplos: ab|cd é equivalente a (ab)|(cd) ; ab\ é equivalente a a(b\).

A sintaxe descrita até o momento é a maior parte da sintaxe de expressão regular egrep do Unix. Esse subconjunto é suficiente para descrever todos os idiomas regulares. Uma linguagem regular é um conjunto de cadeias de caracteres que pode ser correspondida em uma única passagem pelo texto usando apenas uma quantidade fixa de memória. As instalações de expressão regular mais recentes (notadamente Perl e os idiomas que a copiaram) adicionaram muitos novos operadores e sequências de escape. Essas alterações tornam as expressões regulares mais concisas, e às vezes mais enigmáticas, mas não mais poderosas.

Esta página lista a sintaxe de expressão regular aceita por RE2.

Ele também lista algumas sintaxes aceitas por PCRE, PERL e VIM.

Tabelas de sintaxe

Tipos de expressões de caractere único Exemplos
qualquer caractere, possivelmente incluindo nova linha (s=true) .
classe de caractere [xyz]
classe de caractere negada [^xyz]
classe de caractere Perl (link) \d
classe de caractere Perl negada \D
classe de caractere ASCII (link) [[:alpha:]]
classe de caractere ASCII negada [[:^alpha:]]
Classe de caractere unicode (nome de uma letra) \pN
classe de caractere Unicode \p{Greek}
classe de caractere Unicode negada (nome de uma letra) \PN
classe de caractere Unicode negada \P{Greek}
  Compostos
xy x seguido por y
x|y x ou y (prefira x)
  Repetições
x* zero ou mais x, prefira mais
x+ um ou mais x, prefira mais
x? zero ou um x, prefira um
x{n,m} n ou n + 1 ou ... ou m x, prefira mais
x{n,} n ou mais x, prefira mais
x{n} exatamente n x
X*? zero ou mais x, prefira menos
x+? um ou mais x, prefira menos
x?? zero ou um x, prefira zero
x{n,m}? n ou n + 1 ou ... ou m x, prefira menos
x{n,}? n ou mais x, prefira menos
x{n}? exatamente n x
x{} (≡ x*) (SEM SUPORTE) VIM
x{-} (≡ x*?) (SEM SUPORTE) VIM
x{-n} (≡ x{n}?) (SEM SUPORTE) VIM
x= (≡ x?) (SEM SUPORTE) VIM

Restrição de implementação: os formulários x{n,m}de contagem , x{n,}e x{n} rejeitam formulários que criam uma contagem mínima ou máxima de repetição acima de 1000. As repetições ilimitadas não estão sujeitas a essa restrição.

  Repetições possessivas
x*+ zero ou mais x, possessivas (SEM SUPORTE)
x++ um ou mais x, possessivas (SEM SUPORTE)
x?+ zero ou mais x, possessivas (SEM SUPORTE)
x{n,m}+ n ou ... ou m x, possessivas (SEM SUPORTE)
x{n,}+ n ou mais x, possessivas (SEM SUPORTE)
x{n}+ exatamente n x, possessivas (SEM SUPORTE)
  Agrupamento
(re) grupo de captura numerada (subcorrespondência)
(?P<name>re) chamado & grupo de captura numerada (submatch)
(?<name>re) chamado & grupo de captura numerada (submatch) (NÃO SUPORTADO)
(?' name're) chamado & grupo de captura numerada (submatch) (NÃO SUPORTADO)
(?:re) grupo de não captura
(?flags) definir sinalizadores no grupo atual; não captura
(?flags:re) Defina sinalizadores durante a re; não captura
(?#text) comentário (sem suporte)
(?|x|y|z) redefinição de numeração de ramificação (SEM SUPORTE)
(?>re) possessivos correspondentes à re (SEM SUPORTE)
re@> possessivos correspondentes à re (SEM SUPORTE)
%(re) grupo de não captura (SEM SUPORTE) VIM
  Sinalizadores
i não diferencia maiúsculas de minúsculas (padrão falso)
m modo de várias linhas: ^ e $ correspondem ao início/término da linha, além do inicio/término do texto (falso padrão)
s let . Corresponde a \n (padrão falso)
U ungreedy: troca de significado de x* e x*?, x+ e x+?, etc (falso padrão)

A sintaxe do sinalizador é xyz (definida) ou -xyz (desmarcada) ou xy-z (defina xy, desmarque z).

  Cadeias de caracteres vazia
^ no início do texto ou linha (m=true)
$ no final do texto (como \z não \Z) ou linha (m=true)
\A no início do texto
\b em um limite de palavra ASCII (\w em um lado e \W, \A ou \z no outro)
\B não presente em um limite de palavra ASCII
\g ao início do subtexto sendo pesquisado (SEM SUPORTE) PCRE
\G ao final da última correspondência (SEM SUPORTE) PERL
\Z ao final do texto ou antes de nova linha ao final do texto (SEM SUPORTE)
\z ao final do texto
(?=re) antes do texto correspondente à re (SEM SUPORTE)
(?!re) antes do texto não correspondente à re (SEM SUPORTE)
(?<=re) depois do texto correspondente à re (SEM SUPORTE)
(?<!re) depois do texto não correspondente à re (SEM SUPORTE)
re& antes do texto correspondente à re (SEM SUPORTE) VIM
re@= antes do texto correspondente à re (SEM SUPORTE) VIM
re@! antes do texto não correspondente à re (SEM SUPORTE) VIM
<re@= depois do texto correspondente à re (SEM SUPORTE) VIM
re@<! depois do texto não correspondente à re (SEM SUPORTE) VIM
\zs define o início da correspondência (= \K) (SEM SUPORTE) VIM
\ze define o final da correspondência (SEM SUPORTE) VIM
\%^ início do arquivo (SEM SUPORTE) VIM
\%$ final do arquivo (SEM SUPORTE) VIM
\%V na tela (SEM SUPORTE) VIM
\%# posição do cursor (SEM SUPORTE) VIM
\%'m marcar posição do m (SEM SUPORTE) VIM
\%23l na linha 23 (SEM SUPORTE) VIM
\%23c na coluna 23 (SEM SUPORTE) VIM
\%23v na coluna virtual 23 (SEM SUPORTE) VIM
  Sequencias de escape
\a sino (≡ \007)
\f feed de formulário (≡ \014)
\t guia horizontal (≡ \011)
\n nova linha (≡ \012)
\r retorno de carro (≡ \015)
\v Caractere de tabulação vertical (≡ \013)
* literal *, para qualquer caractere de pontuação *
\123 código de caractere octal (até três dígitos)
\x7F código de caractere hex (exatamente dois dígitos)
\x{10FFFF} contagem de caracteres hex
\C combinar um byte único mesmo no modo UTF-8
\Q...\E texto literal... mesmo se... possui pontuação
\1 referência anterior (SEM SUPORTE)
\b backspace (SEM SUPORTE) (usar \010)
\cK caratere de controle ^K (SEM SUPORTE) (usar \001 etc)
\e escape (SEM SUPORTE) (usar \033)
\g1 referência anterior (SEM SUPORTE)
\g{1} referência anterior (SEM SUPORTE)
\g{+1} referência anterior (SEM SUPORTE)
\g{-1} referência anterior (SEM SUPORTE)
\g{name} referência nomeada (SEM SUPORTE)
\g<name> chamada de sub-rotina (SEM SUPORTE)
\g'name' chamada de sub-rotina (SEM SUPORTE)
\k<nome> referência nomeada (SEM SUPORTE)
\k'name' referência nomeada (SEM SUPORTE)
\lX X em minúsculo (SEM SUPORTE)
\ux X em maiúsculo (SEM SUPORTE)
\L...\E texto em minúscula ... (SEM SUPORTE)
\K reiniciar o início de $0 (SEM SUPORTE)
\N{name} caracteres Unicode nomeado (SEM SUPORTE)
\R quebra de linha (SEM SUPORTE)
\U...\E texto em maiúscula ... (SEM SUPORTE)
\X sequência Unicode estendida (SEM SUPORTE)
%d123 caractere decimal 123 (SEM SUPORTE) VIM
%xFF caractere hexadecimal FF (SEM SUPORTE) VIM
%o123 caractere octal 123 (SEM SUPORTE) VIM
%u1234 caractere Unicode 0x1234 (SEM SUPORTE) VIM
%U12345678 caractere Unicode 0x12345678 (SEM SUPORTE) VIM
  Elementos de classe de caractere
x caractere único
A-Z intervalo de caracteres (inclusivo)
\d classe de caractere Perl
[:foo:] classe de caractere ASCII foo
\p{Foo} classe de caractere Unicode Foo
\pF Classe de caractere Unicode F (nome de uma letra)
  Classes de caractere nomeada como elementos de classe de caractere
[\d] dígitos (≡ \d)
[^\d] não são dígitos (≡ \D)
[\D] não são dígitos (≡ \D)
[^\D] não são não dígitos (≡ \d)
[[:name:]] classe ASCII nomeada dentro da classe de caractere (≡ [:name:])
[^[:name:]] classe ASCII nomeada dentro da classe de caractere negada (≡ [:^name:])
[\p{Name}] propriedade Unicode nomeada dentro da classe de caractere (≡ \p{Name})
[^\p{Name}] propriedade Unicode nomeada dentro da classe de caractere negada (≡ \P{Name})
Classes de caracteres Perl (todas somente ASCII)
\d dígitos (≡ [0-9])
\D não são dígitos (≡ [^0-9])
\s espaço em branco (≡ [\t\n\f\r])
\S não é espaço em branco (≡ [^\t\n\f\r])
\w caracteres de palavra (≡ [0-9A-Za-z_])
\W não caracteres de palavra (≡ [^0-9A-Za-z_])
\h espaço horizontal (SEM SUPORTE)
\H não é espaço horizontal (SEM SUPORTE)
\v espaço vertical (SEM SUPORTE)
\V não é espaço vertical (SEM SUPORTE)
classe de caractere ASCII
[[:alnum:]] alfanumérico (≡ [0-9A-Za-z])
[[:alpha:]] alfabético (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] em branco (≡ [\t])
[[:cntrl:]] controle (≡ [\x00-\x1F\x7F])
[[:digit:]] dígitos (≡ [0-9])
[[:graph:]] gráfico (≡ [!-~][A-Za-z0-9!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~])
[[:lower:]] letras em minúscula (≡ [a-z])
[[:print:]] imprimível (≡ [-~] ≡ [[:graph:]])
[[:punct:]] pontuação (≡ [!-/:-@[-`{-~])
[[:space:]] espaço em branco (≡ [\t\n\v\f\r])
[[:upper:]] letras em maiúscula (≡ [A-Z])
[[:word:]] caracteres de palavra (≡ [0-9A-Za-z_])
[[:xdigit:]] dígito hex (≡ [0-9A-Fa-f])
  nomes de classe de caractere Unicode -- categoria geral
C outros
Cc control
Cf format
Cn pontos de código não atribuídos (SEM SUPORTE)
Co uso privado
Cs substituto
L letra
LC letra em maiúscula (SEM SUPORTE)
L& letra em maiúscula (SEM SUPORTE)
Ll letras em minúscula
Lm letra modificadora
Lo outra letra
Lt primeira letra do título em maiúscula
Lu letra em maiúscula
M marcado
Mc marca de espaçamento
Me marca de circunscrição
Mn marca sem espaçamento
N number
Nd número decimal
Nl número da letra
Não outro número
P pontuação
Pc pontuação do conector
Pd traço
Pe pontuação de fechamento
Pf pontuação final
Pi pontuação inicial
Po outra pontuação
Ps pontuação aberta
S symbol
Sc símbolo de moeda
Sk símbolo modificador
Sm símbolo matemático
So outro símbolo
Z separador
Zl separador de linha
Zp separador de parágrafo
Zs separador de espaço
nomes de classe de caractere Unicode -- scripts
Adlam
Ahom
Anatolian_Hieroglyphs
Árabe
armênio
Avestan
Balinês
Bamum
Bassa_Vah
Batak
Bengali
Bhaiksuki
Bopomofo
Brahmi
Braille
Buginese
Buhid
Canadian_Aboriginal
Carian
Caucasian_Albanian
Cakm
Cham
Cheroqui
Chorasmian
Comum
Coptas
Cuneiforme
Cipriota
Cirílica
Deseret
Devanágari
Dives_Akuru
Dogra
Duployan
Egyptian_Hieroglyphs
Elbasan
Elimaico
Etíope
georgiano
Glagolítico
Gótica
Grantha
Grego
Guzerate
Gunjala_Gondi
Gurmukhi
Hangul
Hangul
Hanifi_Rohingya
Hanunoo
Hatran
Hebraico
Hiragana
Imperial_Aramaic
Herdado
Inscriptional_Pahlavi
Inscriptional_Parthian
Javanês
Kthi
kannada
Katakana
Kayah_Li
Kharoshthi
Khitan_Small_Script
Khmer
Khojki
Khudawadi
Lao
Latino
Lepcha
Limbu
Linear_A
Linear_B
Lisu
Lício
Lídio
Mahajani
Makasar
malaiala
Mandaico
Maniqueano
Marchen
Masaram_Gondi
Medefaidrin
Meetei_Mayek
Mende_Kikakui
Meroitic_Cursive
Meroitic_Hieroglyphs
Miao
Modi
Mongol
Mro
Multani
Myanmar
Nabateu
Nandinagari
New_Tai_Lue
Newa
Nko
Nushu
Nyiakeng_Puachue_Hmong
Ogham
Ol_Chiki
Old_Hungarian
Old_Italic
Old_North_Arabian
Old_Permic
Old_Persian
Old_Sogdian
Old_South_Arabian
Old_Turkic
Oriya
Osage
Osmanli
Pahawh_Hmong
Palmirena
Pau_Cin_Hau
Phags_Pa
Fenício
Psalter_Pahlavi
Rejang
Rúnica
Samaritano
Saurashtra
Sharada
Shaviano
Siddham
SignWriting
cingalês
Sogdiano
Sora_Sompeng
Soyombo
Sundanês
Syloti_Nagri
Siríaco
Filipino
Tagbanwa
Tai_Le
Tai_Tham
Tai_Viet
Takri
Tâmil
Tangut
Télugo
Thaana
Tailandês
Tibetano
Tifinagh
Tirhuta
Ugarítico
Vai
Wancho
Warang_Citi
Yezidi
Yi
Zanabazar_Square
  classes de caractere VIM
\i caractere identificador (SEM SUPORTE) VIM
\I \i, exceto dígitos (SEM SUPORTE) VIM
\k caractere de palavra-chave (SEM SUPORTE) VIM
\K \k, exceto dígitos (SEM SUPORTE) VIM
\f caractere de nome de arquivo (SEM SUPORTE) VIM
\F \f, exceto dígitos (SEM SUPORTE) VIM
\p caractere imprimível (SEM SUPORTE) VIM
\P \p, exceto dígitos (SEM SUPORTE) VIM
\s caractere de espaço em branco (≡ [\t]) (SEM SUPORTE) VIM
\S caractere de espaço não em branco (≡ [^ \t]) (SEM SUPORTE) VIM
\d dígitos (≡ [0-9]) VIM
\D Não é \d VIM
\x dígitos hexadecimais (≡ [0-9A-Fa-f]) (SEM SUPORTE) VIM
\X não é \x (SEM SUPORTE) VIM
\o dígitos octais (≡ [0-7]) (SEM SUPORTE) VIM
\O não é \o (SEM SUPORTE) VIM
\w caractere de palavra VIM
\W Não é \w VIM
\h cabeçalho do caractere de palavra (SEM SUPORTE) VIM
\H não é \h (SEM SUPORTE) VIM
\a Alfabético (SEM SUPORTE) VIM
\A não é \a (SEM SUPORTE) VIM
\l em minúsculas (SEM SUPORTE) VIM
\L não minúsculas (SEM SUPORTE) VIM
\u em maiúsculas (SEM SUPORTE) VIM
\U não maiúsculas (SEM SUPORTE) VIM
_X \x mais nova linha, para qualquer x (SEM SUPORTE) VIM
\c ignorar maiúsculas e minúsculas (SEM SUPORTE) VIM
\C diferenciar maiúsculas e minúsculas (SEM SUPORTE) VIM
\m magic (SEM SUPORTE) VIM
\M nomagic (SEM SUPORTE) VIM
\v verymagic (SEM SUPORTE) VIM
\V verynomagic (SEM SUPORTE) VIM
\Z ignorar diferenças na combinação de caracteres Unicode (SEM SUPORTE) VIM
  Magic
(?{code}) código Perl arbitrário (SEM SUPORTE) PERL
(??{code}) código Perl arbitrário adiado (SEM SUPORTE) PERL
(?n) chamada recursiva para o grupo de captura regexp n (SEM SUPORTE)
(?+n) chamada recursiva para o grupo de captura regexp n (SEM SUPORTE)
(?-n) chamada recursiva para o grupo de captura regexp -n (SEM SUPORTE)
(?C) PCRE callout (SEM SUPORTE) PCRE
(?R) chamada recursiva para regexp inteiro (≡ (?0)) (SEM SUPORTE)
(?&nome) chamada recursiva para o grupo nomeado (SEM SUPORTE)
(?P=name) referência nomeada (SEM SUPORTE)
(?P>name) chamada recursiva para o grupo nomeado (SEM SUPORTE)
(? (cond)true|false) ramificação condicional (SEM SUPORTE)
(?(cond)true) ramificação condicional (SEM SUPORTE)
(*ACEITAR) tornar regexps mais semelhantes ao prólogo (SEM SUPORTE)
(*COMMIT) (SEM SUPORTE)
(*F) (SEM SUPORTE)
(*FAIL) (SEM SUPORTE)
(*MARK) (SEM SUPORTE)
(*PRUNE) (SEM SUPORTE)
(*SKIP) (SEM SUPORTE)
(*THEN) (SEM SUPORTE)
(*ANY) definir convenção de nova linha (SEM SUPORTE)
(*ANYCRLF) (SEM SUPORTE)
(*CR) (SEM SUPORTE)
(*CRLF) (SEM SUPORTE)
(*LF) (SEM SUPORTE)
(*BSR_ANYCRLF) definir convenção \R (SEM SUPORTE)
(*BSR_UNICODE) (SEM SUPORTE) PCRE

Licença de conteúdo

Observação

Partes desta página são modificações baseadas no trabalho criado e compartilhado pela Chromium.org e usadas de acordo com os termos descritos na Licença Pública Creative Commons Atribuição 4.0 Internacional. A página original pode ser encontrada aqui.

Licença Creative Commons
Esse trabalho é licenciado sob uma Licença Attribution 4.0 International da Creative Commons.

Consulte também