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}) |
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.
Esse trabalho é licenciado sob uma Licença Attribution 4.0 International da Creative Commons.
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de