Sintassi delle espressioni regolari 2 (RE2.h)
Le espressioni regolari sono una notazione per la descrizione dei set di stringhe di caratteri. Quando una stringa si trova nel set descritto da un'espressione regolare, si dice che l'espressione regolare corrisponde alla stringa.
L'espressione regolare più semplice è un carattere letterale singolo. Fatta eccezione per i metacaratteri, come *+?()|
, i caratteri corrispondono a se stessi. Per trovare una corrispondenza con un metacarattere, eseguirne l'escape con una barra rovesciata. Ad esempio, \+
corrisponde al valore letterale più carattere.
Due espressioni regolari possono essere modificate o concatenate per formare una nuova espressione regolare: se e1 corrisponde a s ed e2 corrisponde a t, e1 | e2 corrisponde a s o t e e1e2 corrisponde a st.
I metacaratteri *
, +
e ?
sono operatori di ripetizione: e1*
corrisponde a una sequenza di zero o più stringhe (possibilmente diverse), ognuna delle quali corrisponde a e1; e1+
corrisponde a uno o più elementi; e1?
corrisponde a zero o uno.
La precedenza dell'operatore, dall'associazione più debole a quella più forte, è la seguente:
- alternanza
- concatenazione
- operatori di ripetizione
Le parentesi esplicite possono essere usate per forzare significati diversi, come nelle espressioni aritmetiche. Alcuni esempi: ab|cd
equivale a (ab)|(cd)
; ab\
equivale a a(b\)
.
La sintassi descritta finora è in gran parte presa dalla tradizionale sintassi delle espressioni regolari egrep di Unix. Questo subset è sufficiente per descrivere tutti i linguaggi regolari. Un linguaggio normale è un set di stringhe che possono essere confrontate in un singolo passaggio del testo usando solo una quantità fissa di memoria. Le più recenti strutture di espressioni regolari (in particolare Perl e i linguaggi che lo hanno copiato) hanno aggiunto molti nuovi operatori e sequenze di escape. Queste modifiche rendono le espressioni regolari più concise e talvolta più criptiche, ma non più potenti.
Questa pagina elenca la sintassi delle espressioni regolari accettate da RE2.
Elenca anche una sintassi accettata da PCRE, PERL e VIM.
Tabelle della sintassi
Tipi di espressioni a caratteri singoli | Esempi |
---|---|
qualsiasi carattere, eventualmente includendo newline (s=true) | . |
classe di caratteri | [xyz] |
classe di carattere negativa | [^xyz] |
classe di caratteri di Perl (collegamento) | \d |
classe di carattere di Perl negati | \D |
classe di caratteri ASCII (collegamento) | [[:alpha:]] |
classe di carattere ASCII negati | [[:^alpha:]] |
classe di caratteri Unicode (nome di una lettera) | \pN |
classe di carattere Unicode negati | \p{Greek} |
classe di caratteri Unicode negati (nome di una lettera) | \PN |
classe di caratteri Unicode negati | \P{Greek} |
Costrutti | |
---|---|
xy | x seguito da y |
x|y | x o y (x preferibile) |
Ripetizioni | |
---|---|
x* | zero o più x, più è preferibile |
x+ | una o più x, più è preferibile |
x? | zero o una x, una è preferibile |
x{n,m} | n o n+1 o ... o m x, più è preferibile |
x{n,} | n o più x, più è preferibile |
x{n} | esattamente n x |
x*? | zero o più x, meno è preferibile |
x+? | una o più x, meno è preferibile |
x?? | zero o una x, zero è preferibile |
x{n,m}? | n o n+1 o ... o m x, meno è preferibile |
x{n,}? | n o più x, meno è preferibile |
x{n}? | esattamente n x |
x{} | (≡ x*) (NON SUPPORTATO) VIGORE |
x{-} | (≡ x*?) (NON SUPPORTATO) VIGORE |
x{-n} | (≡ x{n}?) (NON SUPPORTATO) VIM |
x= | (≡ x?) (NON SUPPORTATO) VIM |
Restrizione di implementazione: i moduli x{n,m}
di conteggio , x{n,}
e x{n}
rifiutano i moduli che creano un numero di ripetizioni minimo o massimo superiore a 1000. Le ripetizioni illimitate non sono soggete a questa limitazione.
Ripetizioni possessive | |
---|---|
x*+ | zero o più x, possessiva (NON SUPPORTATO) |
x++ | una o più x, possessiva (NON SUPPORTATO) |
x?+ | zero o una x, possessiva (NON SUPPORTATO) |
x{n,m}+ | n or ... o m x, possessivo (NON SUPPORTATO) |
x{n,}+ | n o più x, possessiva (NON SUPPORTATO) |
x{n}+ | esattamente n x, possessiva (NON SUPPORTATO) |
Raggruppamento | |
---|---|
(re) | gruppo di cattura numerato (sottocorrispondenza) |
(?P<nome>re) | denominato & gruppo di acquisizione numerato (sottomatch) |
(?<nome>re) | denominato & gruppo di acquisizione numerato (sottomatch) (NON SUPPORTATO) |
(?' name're) | denominato & gruppo di acquisizione numerato (sottomatch) (NON SUPPORTATO) |
(?:re) | gruppo non di cattura |
(?flags) | imposta contrassegni nel gruppo corrente; non catturante |
(?flags:re) | imposta contrassegni durante re; non catturante |
(?#text) | commento (NON SUPPORTATO) |
(?|x|y|z) | reimpostazione numerazione ramo (NON SUPPORTATO) |
(?>re) | corrispondenza possessiva di re (NON SUPPORTATO) |
re@> | corrispondenza possessiva di re (NON SUPPORTATO) VIM |
%(re) | gruppo non di cattura (NON SUPPORTATO) VIM |
Flag | |
---|---|
i | non sensibile alle maiuscole (false è predefinito) |
m | modalità multiriga: ^ e $ corrispondono alla riga di inizio/fine oltre al testo di inizio/fine (false è predefinito) |
s | lascia . corrispondenza \n (false è predefinito) |
U | ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false) |
La sintassi del flag è xyz
(set) o -xyz
(clear) o xy-z
(set xy
, clear z
).
Stringhe vuote | |
---|---|
^ | all'inizio del testo o della riga (m=true) |
$ | alla fine del testo (come \z non \Z) o della riga (m=true) |
\A | all'inizio del testo |
\b | al confine parola ASCII (\w su un lato e \W, \A, o \z sull'altro) |
\B | non al confine parola ASCII |
\g | all'inizio del sottotesto cercato (NON SUPPORTATO) PCRE |
\G | alla fine dell'ultima corrispondenza (NON SUPPORTATO) PERL |
\Z | alla fine del testo o prima di una nuova riga alla fine del testo (NON SUPPORTATO) |
\z | alla fine del testo |
(?=re) | prima del testo che corrisponde a re (NON SUPPORTATO) |
(?!re) | prima del testo che non corrisponde a re (NON SUPPORTATO) |
(?<=re) | dopo il testo che corrisponde a re (NON SUPPORTATO) |
(?<!re) | dopo il testo che non corrisponde a re (NON SUPPORTATO) |
re& | prima del testo che corrisponde a re (NON SUPPORTATO) VIM |
re@= | prima del testo che corrisponde a re (NON SUPPORTATO) VIM |
re@! | prima del testo che non corrisponde a re (NON SUPPORTATO) VIM |
<re@= | dopo il testo che corrisponde a re (NON SUPPORTATO) VIM |
re@<! | dopo il testo che non corrisponde a re (NON SUPPORTATO) VIM |
\zs | imposta inizio della corrispondenza (= \K) (NON SUPPORTATO) VIM |
\ze | imposta fine della corrispondenza (= \K) (NON SUPPORTATO) VIM |
\%^ | inizio del file (NON SUPPORTATO) VIM |
\%$ | fine del file (NON SUPPORTATO) VIM |
\%V | sullo schermo (NON SUPPORTATO) VIM |
\%# | posizione cursore (NON SUPPORTATO) VIM |
\%'m | segna posizione m (NON SUPPORTATO) VIM |
\%23l | nella riga 23 (NON SUPPORTATO) VIM |
\%23c | nella colonna 23 (NON SUPPORTATO) VIM |
\%23v | nella colonna virtuale 23 (NON SUPPORTATO) VIM |
Sequenze di escape | |
---|---|
\a | campanello (≡ \007) |
\f | feed modulo (≡ \014) |
\t | scheda orizzontale (≡ \011) |
\n | nuova riga (≡ \012) |
\r | ritorno a capo (≡ \015) |
\v | carattere scheda verticale (≡ \013) |
* | letterale *, per qualsiasi carattere di punteggiatura * |
\123 | codice di carattere ottale (fino a 3 cifre) |
\x7F | codice carattere esadecimale (esattamente due cifre) |
\x{10FFFF} | codice carattere esadecimale |
\C | corrispondenza per un singolo byte anche nella modalità UTF-8 |
\Q...\E | testo letterale ... anche se ... ha la punteggiatura |
\1 | backreference (NON SUPPORTATO) |
\b | cancelletto (NOT SUPPORTED) (usare \010) |
\cK | carattere di controllo ^K (NON SUPPORTATO) (usare \001 ecc.) |
\e | escape (NON SUPPORTATO) (usare \033) |
\g1 | backreference (NON SUPPORTATO) |
\g{1} | backreference (NON SUPPORTATO) |
\g{+1} | backreference (NON SUPPORTATO) |
\g{-1} | backreference (NON SUPPORTATO) |
\g{name} | backreference nominato (NON SUPPORTATO) |
\g<nome> | invoca sottoroutine (NON SUPPORTATO) |
\g'name' | invoca sottoroutine (NON SUPPORTATO) |
\k<nome> | backreference nominato (NON SUPPORTATO) |
\k'name' | backreference nominato (NON SUPPORTATO) |
\lX | X minuscola (NON SUPPORTATO) |
\ux | X maiuscola (NON SUPPORTATO) |
\L...\E | testo minuscolo ... (NON SUPPORTATO) |
\K | reimposta inizio di $0 (NON SUPPORTATO) |
\N{nome} | carattere Unicode nominato (NON SUPPORTATO) |
\R | interruzione di riga (NON SUPPORTATO) |
\U...\E | testo maiuscolo ... (NON SUPPORTATO) |
\X | sequenza Unicode estesa (NON SUPPORTATO) |
%d123 | carattere decimale 123 (NON SUPPORTATO) VIM |
%xFF | carattere esadecimale FF (NON SUPPORTATO) VIM |
%o123 | carattere ottale 123 (NON SUPPORTATO) VIM |
%u1234 | carattere Unicode 0x1234 (NON SUPPORTATO) VIM |
%U12345678 | carattere Unicode 0x12345678 (NON SUPPORTATO) VIM |
Elementi delle classi di caratteri | |
---|---|
x | carattere singolo |
A-Z | intervallo di caratteri (inclusivo) |
\d | Classe di caratteri di Perl |
[:foo:] | foo classe di caratteri ASCII |
\p{Foo} | foo classe di caratteri Unicode |
\pF | classe di caratteri Unicode F (nome di una lettera) |
Classi di caratteri nominati come elementi di classi di caratteri | |
---|---|
[\d] | cifre (≡ \d) |
[^\d] | non cifre (≡ \D) |
[\D] | non cifre (≡ \D) |
[^\D] | non non cifre (≡ \d) |
[[:nome:]] | classe ASCII nominati inclusa in una classe di caratteri (≡ [:nome:]) |
[^[:nome:]] | classe ASCII nominata inclusa in una classe negata (≡ [:^nome:]) |
[\p{Name}] | proprietà Unicode nominata inclusa in una classe di caratteri (≡ \p{Name}) |
[^\p{Name}] | proprietà Unicode nominata inclusa in un carattere negato (≡ \P{Nome}) |
Nomi di classi di caratteri di Unicode - categoria generale | |
---|---|
C | altro |
Cc | control |
Cf | format |
CN | punti di codice non assegnati (NON SUPPORTATO) |
Co | uso privato |
Cs | surrogato |
L | lettera |
LC | lettera con maiuscole/minuscole (NON SUPPORTATO) |
L& | lettera con maiuscole/minuscole (NON SUPPORTATO) |
Ll | lettera minuscola |
Lm | lettera modificatore |
Lo | altra lettera |
Lt | lettera del titolo |
Lu | lettera maiuscola |
M | segno |
Mc | segno di spaziatura |
Me | segno di chiusura |
Mn | segno non di spaziatura |
N | number |
Nd | numero decimale |
Nl | numero lettera |
No | altro numero |
P | punteggiatura |
Pc | punteggiatura connettore |
Pd | punteggiatura trattino |
Pe | punteggiatura di chiusura |
Pf | punteggiatura finale |
Pi | punteggiatura iniziale |
Po | altra punteggiatura |
Ps | punteggiatura aperta |
S | symbol |
Sc | simbolo attuale |
Sk | simbolo modificatore |
Sm | simbolo matematico |
So | altro simbolo |
Z | separatore |
Zl | separatore riga |
Zp | separatore paragrafo |
Zs | separatore spazio |
Nomi di classi di caratteri di Unicode -- sistemi di scrittura |
---|
Adlam |
Ahom |
Anatolian_Hieroglyphs |
Arabo |
Armeno |
Avestico |
Balinese |
Bamum |
Bassa_Vah |
Batak |
Bengali |
Bhaiksuki |
Bopomofo |
Brahmi |
Braille |
Buginese |
Buhid |
Canadian_Aboriginal |
Cario |
Caucasian_Albanian |
Chakma |
Cham |
Cherokee |
Chorasmian |
Comune |
Copto |
Cuneiforme |
Cipriota |
Cirillico |
Deseret |
Devanagari |
Dives_Akuru |
Dogra |
Duployan |
Egyptian_Hieroglyphs |
Elbasano |
Elimaico |
Etiopico |
Georgiano |
Glagolitico |
Gotico |
Grantha |
Greco |
Gujarati |
Gunjala_Gondi |
Gurmukhi |
Han |
Hangul |
Hanifi_Rohingya |
Hanunoo |
Hatran |
Ebraico |
Hiragana |
Imperial_Aramaic |
Ereditato |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Giavanese |
Kaithi |
Kannada |
Katakana |
Kayah_Li |
Kharoshthi |
Khitan_Small_Script |
Khmer |
Khojki |
Khudawadi |
Lao |
Latino |
Lepcha |
Limbu |
Linear_A |
Linear_B |
Lisu |
Liciano |
Lidio |
Mahajani |
Makasar |
Malayalam |
Mandaico |
Manicheo |
Marchen |
Masaram_Gondi |
Medefaidrin |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Miao |
Modi |
Mongolo |
Mro |
Multani |
Myanmar |
Nabateo |
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 |
Osmanya |
Pahawh_Hmong |
Palmireno |
Pau_Cin_Hau |
Phags_Pa |
Fenicio |
Psalter_Pahlavi |
Rejang |
Runico |
Samaritano |
Saurashtra |
Sharada |
L'shaviano |
Siddham |
Linguaggio dei segni |
Singalese |
Sogdiano |
Sora_Sompeng |
Soyombo |
Sundanese |
Syloti_Nagri |
Siriano |
Tagalog |
Tagbanwa |
Tai_Le |
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Tangut |
Telugu |
Thaana |
Thai |
Tibetano |
Tifinagh |
Tirhuta |
Ugaritico |
Vai |
Wancho |
Warang_Citi |
Yezidi |
Yi |
Zanabazar_Square |
Classi di caratteri di VIM | |
---|---|
\i | carattere identificatore (NON SUPPORTATO) VIM |
\I | \i tranne i numeri (NON SUPPORTATO) VIM |
\k | carattere tastiera (NON SUPPORTATO) VIM |
\K | \k tranne numeri (NON SUPPORTATO) VIM |
\f | carattere nome di file (NON SUPPORTATO) VIM |
\F | \f tranne numeri (NON SUPPORTATO) VIM |
\p | caratteri stampabili (NON SUPPORTATO) VIM |
\P | \p tranne caratteri (NON SUPPORTATO) VIM |
\s | carattere spazio (≡ [\t]) (NON SUPPORTATO) VIM |
\S | carattere non spazio (≡ [^ \t]) (NON SUPPORTATO) VIM |
\d | cifre (≡ [0-9]) VIM |
\D | non \d VIM |
\x | cifre esadecimali (≡ [0-9A-Fa-f]) (NON SUPPORTATO) VIM |
\X | non \x (NON SUPPORTATO) VIM |
\o | cifre ottali (≡ [0-7]) (NON SUPPORTATO) VIM |
\O | non \o (NON SUPPORTATO) VIM |
\w | carattere di parola VIM |
\W | non \w VIM |
\h | inizio carattere di parola (NON SUPPORTATO) VIM |
\H | non \h (NON SUPPORTATO) VIM |
\a | alfabetico (NON SUPPORTATO) VIM |
\A | non \a (NOT SUPPORTED) VIM |
\l | minuscola (NON SUPPORTATO) VIM |
\L | non minuscola (NON SUPPORTATO) VIM |
\u | maiuscola (NON SUPPORTATO) VIM |
\U | non maiuscola (NON SUPPORTATO) VIM |
_x | \x più newline, per qualsiasi x (NON SUPPORTATO) VIM |
\c | ignora maiuscola/minuscola (NON SUPPORTATO) VIM |
\C | corrispondenza maiuscola/minuscola (NON SUPPORTATO) VIM |
\m | magic (NON SUPPORTATO) VIM |
\M | no magic (NON SUPPORTATO) VIM |
\v | very magic (NON SUPPORTATO) VIM |
\V | very no magic (NON SUPPORTATO) VIM |
\Z | ignora differenze nei caratteri di combinazione di Unicode (NON SUPPORTATO) VIM |
Magic | |
---|---|
(?{code}) | codice Perl arbitrario (NON SUPPORTATO) PERL |
(??{code}) | codice Perl arbitrario posticipato (NON SUPPORTATO) PERL |
(?n) | invocazione ricorsiva gruppo n di cattura regexp (NON SUPPORTATO) |
(?+n) | invocazione ricorsiva per gruppo relativo +n (NON SUPPORTATO) |
(?-n) | invocazione ricorsiva per gruppo relativo -n (NON SUPPORTATO) |
(?C) | Invocazione PCRE (NON SUPPORTATO) CPRE |
(?R) | invocazione ricorsiva intero regexp (≡ (?0)) (NON SUPPORTATO) |
(?&nome) | invocazionericorsiva per gruppo nominato (NON SUPPORTATO) |
(?P=nome) | backreference nominato (NON SUPPORTATO) |
(?P>nome) | invocazione ricorsiva per gruppo nominato (NON SUPPORTATO) |
(? (cond)true|false) | ramo condizionale (NON SUPPORTATO) |
(?(cond)true) | ramo condizionale (NON SUPPORTATO) |
(*ACCETTA) | rende i regexps simili a Prolog (NON SUPPORTATO) |
(*COMMIT) | (NON SUPPORTATO) |
(*F) | (NON SUPPORTATO) |
(*FAIL) | (NON SUPPORTATO) |
(*MARK) | (NON SUPPORTATO) |
(*PRUNE) | (NON SUPPORTATO) |
(*SKIP) | (NON SUPPORTATO) |
(*THEN) | (NON SUPPORTATO) |
(*ANY) | imposta convenzione newline (NON SUPPORTATO) |
(*ANYCRLF) | (NON SUPPORTATO) |
(*CR) | (NON SUPPORTATO) |
(*CRLF) | (NON SUPPORTATO) |
(*LF) | (NON SUPPORTATO) |
(*BSR_ANYCRLF) | imposta convenzione \R (NON SUPPORTATO) PCRE |
(*BSR_UNICODE) | (NON SUPPORTATO) PCRE |
Licenza dei contenuti
Nota
Parti di questa pagina sono modifiche basate sul lavoro creato e condiviso da Chromium.org e usate in base ai termini descritti nella licenza Creative Commons Attribution 4.0 International. La pagina originale è disponibile qui.
Questo lavoro è concesso in licenza in base a una licenza Creative Commons Attribution 4.0 International.