Riferimento: cosa significa questa regex?
Cos'è questo?
Questa è una raccolta di domande e risposte comuni. Questo è anche un wiki comunitario, quindi tutti sono invitati a partecipare alla sua manutenzione.
Perchè è questo?
regex soffre di domande sul tipo di codice give me ze e risposte scadenti senza spiegazioni. Questo riferimento ha lo scopo di fornire collegamenti a domande e risposte di qualità.
Qual è lo scopo?
Questo riferimento è destinato ai seguenti linguaggi: php , perl , javascript , python , ruby , java , .net .
Potrebbe essere troppo ampio, ma queste lingue condividono la stessa sintassi. Per caratteristiche specifiche c'è il tag della lingua dietro, ad esempio:
- Cosa sono i gruppi di bilanciamento delle espressioni regolari? .netto
Risposte
Domande frequenti sulle espressioni regolari di Stack Overflow
Vedi anche molti suggerimenti generali e link utili nella pagina dei dettagli del tag regex .
Tutorial online
Quantificatori
- Zero-o-più:
*
: avidi ,*?
: riluttante ,*+
: possessivo - One-o-più:
+
: avidi ,+?
: riluttante ,++
: possessivo ?
: opzionale (zero o uno)- Min / max range (tutto compreso):
{n,m}
: tra n & m ,{n,}
n-or-more ,{n}
: esattamente n - Differenze tra il quantificatore avido, riluttante (noto anche come "pigro", "ungreedy") e possessivo:
- Avidi contro riluttanti contro quantificatori possessivi
- Discussione approfondita sulle differenze tra avido e non avido
- Qual è la differenza tra
{n}
e{n}?
- Qualcuno può spiegarmi i quantificatori possessivi? php , perl , java , ruby
- Emulazione di quantificatori possessivi .net
- Riferimenti non Stack Overflow: da Oracle , regular-expressions.info
Classi di caratteri
- Qual è la differenza tra parentesi quadre e parentesi?
[...]
: qualsiasi carattere[^...]
,: negato / qualsiasi carattere ma[^]
corrisponde a qualsiasi carattere incluso javascript di nuova riga[\w-[\d]]
/[a-z-[qz]]
: imposta la sottrazione .net , xml-schema , xpath , JGSoft[\w&&[^\d]]
: imposta l'intersezione java , ruby 1.9+[[:alpha:]]
: Classi di caratteri POSIX- Perché i
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
ottenere risultati diversi in Java? Giava - Abbreviazione:
- Digit:
\d
: cifre ,\D
: non cifre - Carattere di parola (Lettera, cifre, sottolineatura):
\w
: carattere di parola ,\W
: carattere non di parola - Spazio bianco:
\s
: spazi bianchi ,\S
: non-spazio bianco
- Digit:
- Categorie Unicode (
\p{L}, \P{L}
, ecc.)
Sequenze di escape
- Spazio bianco orizzontale:
\h
: spazio-o-tab ,\t
: scheda - Newline:
- Sequenze di spazi vuoti negati:: carattere di
\H
spazio non orizzontale,: carattere di spazio\V
non verticale\N
,: carattere di avanzamento di riga pcre php5 java-8 - Altro:
\v
: tabulazione verticale ,\e
: il carattere di escape
Ancore
^
: inizio della linea / ingresso ,\b
: confine di parola, e\B
: non limite di parola ,$
: fine linea / ingresso\A
: inizio\Z
dell'input ,: fine dell'input php , perl , ruby\z
: la fine dell'input (\Z
in Python) .net , php , pcre , java , ruby , icu , swift , goal -c\G
: inizio della partita php , perl , ruby
(Vedi anche "Informazioni specifiche sull'aroma → Java → Le funzioni in Matcher
")
Gruppi
(...)
: Gruppo di cattura ,(?:)
: gruppo non-capture\1
: riferimento a ritroso e riferimento al$1
gruppo di cattura,: riferimento al gruppo di cattura- Cosa significa un sottomodello
(?i:regex)
? - Cosa significa la "P"
(?P<group_name>regexp)
? (?>)
: Gruppo atomica o gruppo indipendente ,(?|)
: ripristino ramo- Gruppi di cattura denominati:
- Riferimento generale del gruppo di acquisizione denominato in
regular-expressions.info
- java :
(?<groupname>regex)
: Presentazione e regole di denominazione (collegamenti non-Stack Overflow) - Altre lingue: pitone , .net , perl , e php
(?P<groupname>regex)
(?<groupname>regex)
(?<groupname>regex)
(?P<groupname>regex)
(?<groupname>regex)
- Riferimento generale del gruppo di acquisizione denominato in
Lookarounds
- Lookaheads:
(?=...)
: positiva ,(?!...)
: negative - Lookbehinds:
(?<=...)
: positivo ,(?<!...)
: negativo (non supportato da JavaScript ) - Guarda oltre i limiti in:
- Guarda dietro le alternative:
Modificatori
- La maggior parte dei gusti:
g
: globale ,i
: case-insensitive ,u
: unicode ,x
: spazi-extended c
: posizione corrente perle
: espressione php perlo
: once rubym
: multilinea php perl python javascript .net java ,m
: (non) multilinea rubinos
: riga singola (non supportata da javascript o ruby ),s
soluzione javascriptS
: study phpU
: ungreedy php r- Come convertire preg_replace e in preg_replace_callback?
- Cosa sono i modificatori in linea?
- Cos'è "? -Mix" in un'espressione regolare di Ruby
Altro:
|
: alternanza (OR) operatore ,.
: qualsiasi carattere ,[.]
: carattere punto letterale- Quali caratteri speciali devono essere sottoposti a escape?
- Verbi di controllo ( PHP e Perl ):
(*PRUNE)
,(*SKIP)
,(*FAIL)
e(*F)
- solo php :
(*BSR_ANYCRLF)
- solo php :
- Ricorsione ( php e perl ):
(?R)
,(?0)
e(?1)
,(?-1)
,(?&groupname)
Attività comuni
- Ottieni una stringa tra due parentesi graffe:
{...}
- Abbina (o sostituisci) un modello tranne nelle situazioni s1, s2, s3 ...
- Come faccio a trovare tutti gli ID video di YouTube in una stringa utilizzando un'espressione regolare?
- Validazione:
- Internet: indirizzi e-mail , URL (host / porta: alternative regex e non regex ), password
- Numerico: un numero , intervalli min-max (ad esempio 1-31) , numeri di telefono , data
- Analisi dell'HTML con regex: vedere "Informazioni generali> Quando non utilizzare Regex"
Regex-Fu avanzato
- Stringhe e numeri:
- Espressione regolare per trovare una corrispondenza con una riga che non contiene una parola
- In che modo questo pattern PCRE rileva i palindromi?
- Trova le stringhe la cui lunghezza è una quarta potenza
- In che modo questa regex trova i numeri triangolari?
- Come determinare se un numero è un numero primo con regex?
- Come abbinare il carattere centrale in una stringa con regex?
- Altro:
- Come possiamo abbinare a ^ nb ^ n con regex Java?
- Trova le parentesi nidificate
- Corrispondenza regex "verticale" in una "immagine" ASCII
- Elenco di domande regex molto votate su Code Golf
- Come fare in modo che due quantificatori ripetano lo stesso numero di volte?
- Un'espressione regolare impossibile da abbinare:
(?!a)a
- Abbina / cancella / sostituisci
this
tranne nei contesti A, B e C - Abbina parentesi nidificate con regex senza utilizzare la ricorsione o i gruppi di bilanciamento?
Informazioni specifiche sul sapore
(Ad eccezione di quelli contrassegnati con *
, questa sezione contiene collegamenti non Stack Overflow.)
- Giava
- Documentazione ufficiale: Pattern Javadoc , tutorial sulle espressioni regolari di Oracle
- Le differenze tra le funzioni in
java.util.regex.Matcher
:matches()
): La corrispondenza deve essere ancorata a input-start e-endfind()
): Una corrispondenza può essere ovunque nella stringa di input (sottostringhe)lookingAt()
: La corrispondenza deve essere ancorata solo a input-start- (Per gli ancoraggi in generale, vedere la sezione "Ancoraggi")
- Le uniche
java.lang.String
funzioni che accettano le espressioni regolari:matches(s)
,replaceAll(s,s)
,replaceFirst(s,s)
,split(s)
,split(s,i)
- * Una discussione (supponente e) dettagliata degli svantaggi e delle caratteristiche mancanti in
java.util.regex
- .NETTO
- Documentazione ufficiale:
- Boost regex engine: sintassi generale , sintassi Perl (usata da TextPad, Sublime Text, UltraEdit, ... ???)
- Informazioni generali su JavaScript 1.5 e oggetto RegExp
- .NET
- PHP: sintassi del pattern ,
preg_match
- Python: operazioni con espressioni regolari ,
search
vsmatch
, come fare - Splunk: terminologia regex e sintassi e comando regex
- Tcl: sintassi regex , manpage ,
regexp
comando - Trova e sostituisci in Visual Studio
Informazione Generale
(I collegamenti contrassegnati con *
non sono collegamenti di overflow dello stack.)
- Altre risorse di documentazione generale: apprendimento delle espressioni regolari , * Regular-expressions.info , * voce di Wikipedia , * RexEgg , Open-Directory Project
- DFA contro NFA
- Generazione di stringhe corrispondenti all'espressione regolare
- Libri: Mastering Regular Expressions di Jeffrey Friedl
- Quando non utilizzare le espressioni regolari:
- Alcune persone, di fronte a un problema, pensano "Lo so, userò espressioni regolari". Adesso hanno due problemi. (post del blog scritto dalfondatoredi Stack Overflow ) *
- Non utilizzare regex per analizzare l'HTML:
- Non farlo .
- Beh, forse ... se sei davvero determinato (anche altre risposte a questa domanda sono buone)
- Non farlo .
Esempi di regex che possono causare il malfunzionamento del motore regex
Strumenti: tester e spiegatori
(Questa sezione contiene collegamenti non di overflow dello stack.)
Online (* include tester sostitutivo, + include split tester) :
- Debuggex (ha anche un repository di espressioni regolari utili) javascript , python , pcre
- * Espressioni regolari 101 php , pcre , python , javascript
- Regex Pal , regular-expressions.info javascript
- Rubino rubino
- * + regexstorm.net .net
- * RegexPlanet: Java java , Go go , Haskell haskell , JavaScript javascript , .NET dotnet , Perl perl php PCRE php , Python python , Ruby ruby , XRegExp xregexp
freeformatter.com
xregexp- * + php PCRE e POSIX, javascript
regex.larsolavtorvik.com
- Ricomporre javascript ruby .net
Disconnesso:
- Microsoft Windows: RegexBuddy (analisi), RegexMagic (creazione), Expresso (analisi, creazione, gratuito)