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
\Hspazio non orizzontale,: carattere di spazio\Vnon 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\Zdell'input ,: fine dell'input php , perl , ruby\z: la fine dell'input (\Zin 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$1gruppo 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 perl
e: espressione php perl
o: once rubym: multilinea php perl python javascript .net java ,m: (non) multilinea rubinos: riga singola (non supportata da javascript o ruby ),ssoluzione javascriptS: study php
U: 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
thistranne 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.Stringfunzioni 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
MySQL
Oracle
Perl5 versione 18.2
- PHP: sintassi del pattern ,
preg_match - Python: operazioni con espressioni regolari ,
searchvsmatch, come fare - Splunk: terminologia regex e sintassi e comando regex
- Tcl: sintassi regex , manpage ,
regexpcomando - 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 .
Per favore, 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
RegExr
Regex Hero dotnet
- * + 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.comxregexp- * + php PCRE e POSIX, javascript
regex.larsolavtorvik.com - Ricomporre javascript ruby .net
Disconnesso:
- Microsoft Windows: RegexBuddy (analisi), RegexMagic (creazione), Expresso (analisi, creazione, gratuito)