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 está no conjunto descrito por uma expressão regular, dizemos que a expressão regular corresponde à cadeia.
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 invertida. Por exemplo, \+
corresponde ao caráter de adição literal.
Duas expressões regulares podem ser alteradas ou concatenadas para formar uma nova expressão regular: se e1 corresponder a ee2 corresponde a t, e1 | e2 corresponde a s ou t e e1e2 corresponde a st.
Os metacaractadores *
, +
e ?
são operadores de repetição: e1*
corresponde a uma sequência de zero ou mais cadeias (possivelmente diferentes), cada uma das quais corresponde a e1; e1+
corresponde a um ou mais; e1?
corresponde a zero ou um.
A precedência do operador, do enlace mais fraco ao mais forte, é a seguinte:
- alternação
- concatenação
- operadores de repetição
Os parênteses explícitos podem ser utilizados 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. Este subconjunto é suficiente para descrever todos os idiomas normais. Um idioma normal é um conjunto de cadeias que podem ser correspondidas numa única passagem através do texto utilizando apenas uma quantidade fixa de memória. As mais recentes instalações de expressão regular (nomeadamente o Perl e os idiomas que o copiaram) adicionaram muitos novos operadores e sequências de escape. Estas alterações tornam as expressões regulares mais concisas e, por vezes, mais enigmáticas, mas não mais poderosas.
Esta página lista a sintaxe de expressão regular aceita por RE2.
Também lista alguma sintaxe aceite por PCRE, PERL e VIM.
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*) (NÃO SUPORTADO) VIM |
x{-} | (≡ x*?) (NÃO SUPORTADO) 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 de repetições mínima ou máxima 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) | com o nome & grupo de captura numerado (submatch) |
(?<name>re) | com o nome & grupo de captura numerado (sub-correspondência) (NÃO SUPORTADO) |
(?' name're) | com o nome & grupo de captura numerado (sub-correspondência) (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 | não gananciosa: trocar o significado de x* e x*?, x+ e x+?, etc(predefinição falso) |
A sintaxe do sinalizador é xyz
(definida) ou -xyz
(desmarcada) ou xy-z
(definida , desmarque xy
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 caráter 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}) |
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) |
(*CONSOLIDAR) | (SEM SUPORTE) |
(*F) | (SEM SUPORTE) |
(*FALHAR) | (SEM SUPORTE) |
(*MARCAR) | (SEM SUPORTE) |
(*PRUNE) | (SEM SUPORTE) |
(*IGNORAR) | (SEM SUPORTE) |
(*ENTÃO) | (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 |
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.
Esse trabalho é licenciado sob uma Licença Attribution 4.0 International da Creative Commons.