Referenz - Was bedeutet dieser Regex?
Was ist das?
Dies ist eine Sammlung allgemeiner Fragen und Antworten. Dies ist auch ein Community-Wiki, daher ist jeder eingeladen, sich an dessen Pflege zu beteiligen.
Warum ist das?
Regex leidet darunter , mir Fragen vom Typ Code und schlechte Antworten ohne Erklärung zu geben. Diese Referenz soll Links zu hochwertigen Fragen und Antworten enthalten.
Was ist der Umfang?
Diese Referenz ist für die folgenden Sprachen gedacht: PHP , Perl , Javascript , Python , Ruby , Java , .net .
Dies mag zu weit gefasst sein, aber diese Sprachen haben dieselbe Syntax. Für bestimmte Funktionen steht das Tag der Sprache dahinter, Beispiel:
- Was sind Balancing Groups mit regulären Ausdrücken? .Netz
Antworten
Die häufig gestellten Fragen zu Stapelüberlauf-regulären Ausdrücken
Siehe auch viele allgemeine Hinweise und nützliche Links auf der Regex- Tag- Detailseite .
Online-Tutorials
Quantifizierer
- Null oder mehr
*
:: gierig ,*?
: widerstrebend ,*+
: besitzergreifend - Eins oder mehr
+
:: gierig ,+?
: widerstrebend ,++
: besitzergreifend ?
: optional (null oder eins)- Min / Max-Bereiche (alles inklusive) ::
{n,m}
zwischen n & m ,{n,}
: n-oder mehr ,{n}
: genau n - Unterschiede zwischen gierig, widerstrebend (alias "faul", "ungreedy") und besitzergreifendem Quantifizierer:
- Gierig gegen widerstrebend gegen besitzergreifende Quantifizierer
- Eingehende Diskussion über die Unterschiede zwischen gierig und nicht gierig
- Was ist der Unterschied zwischen
{n}
und{n}?
- Kann mir jemand Possessive Quantifiers erklären? PHP , Perl , Java , Rubin
- Possessive Quantifizierer emulieren .net
- Non-Stack Overflow-Referenzen: Von Oracle , reguläre-Ausdrücke.info
Zeichenklassen
- Was ist der Unterschied zwischen eckigen Klammern und Klammern?
[...]
: ein beliebiges Zeichen ,[^...]
: negiert / ein beliebiges Zeichen aber[^]
Entspricht einem beliebigen Zeichen, einschließlich Newlines Javascript[\w-[\d]]
/[a-z-[qz]]
: Setze Subtraktion .net , XML-Schema , Xpath , JGSoft[\w&&[^\d]]
: Kreuzung Java , Ruby 1.9+ setzen[[:alpha:]]
: POSIX-Zeichenklassen- Warum
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
erhalten unterschiedliche Ergebnisse in Java? Java - Kurzschrift:
- Ziffer ::
\d
Ziffer ,\D
: Nicht-Ziffer \w
Wortzeichen (Buchstabe, Ziffer, Unterstrich) :: Wortzeichen ,\W
: Nichtwortzeichen\s
Leerzeichen :: Leerzeichen ,\S
: Nicht-Leerzeichen
- Ziffer ::
- Unicode-Kategorien (
\p{L}, \P{L}
usw.)
Escape-Sequenzen
- Horizontal Leerzeichen:
\h
: Raum-or-Registerkarte ,\t
: tab - Newlines:
- Negierte Whitespace-Sequenzen ::
\H
Nicht horizontales Whitespace-Zeichen ,\V
: Nicht vertikales Whitespace-Zeichen ,\N
: Nicht-Zeilenvorschub-Zeichen pcre php5 java-8 - Andere
\v
:: vertikale Registerkarte ,\e
: das Escape-Zeichen
Anker
^
: Zeilenanfang / Eingabe ,\b
: Wortgrenze und\B
: Nicht-Wortgrenze ,$
: Zeilenende / Eingabe\A
: Beginn der Eingabe ,\Z
: Ende der Eingabe PHP , Perl , Ruby\z
: das Ende der Eingabe (\Z
in Python) .net , PHP , PCRE , Java , Ruby , ICU , Swift , Objective-C\G
: Spielbeginn PHP , Perl , Rubin
(Siehe auch "Geschmacksspezifische Informationen → Java → Die Funktionen in Matcher
")
Gruppen
(...)
: Erfassungsgruppe ,(?:)
: Nicht-Erfassungsgruppe\1
: Rückreferenz und Erfassungsgruppenreferenz ,$1
: Erfassungsgruppenreferenz- Was bedeutet ein Untermuster
(?i:regex)
? - Was bedeutet das "P"
(?P<group_name>regexp)
? (?>)
: Atomgruppe oder unabhängige Gruppe ,(?|)
: Zweig zurücksetzen- Benannte Erfassungsgruppen:
- Allgemeine benannte Erfassungsgruppenreferenz bei
regular-expressions.info
- Java :
(?<groupname>regex)
: Übersicht und Benennungsregeln (Non-Stack - Überlauf Links) - Andere Sprachen: Python , .net , Perl , und php
(?P<groupname>regex)
(?<groupname>regex)
(?<groupname>regex)
(?P<groupname>regex)
(?<groupname>regex)
- Allgemeine benannte Erfassungsgruppenreferenz bei
Lookarounds
- Lookaheads ::
(?=...)
positiv ,(?!...)
: negativ - Lookbehinds ::
(?<=...)
positiv ,(?<!...)
: negativ (wird von Javascript nicht unterstützt ) - Lookbehind-Grenzen in:
- Lookbehind-Alternativen:
Modifikatoren
- Die meisten Geschmacksrichtungen ::
g
global ,i
: Groß- und Kleinschreibung wird nicht berücksichtigt ,u
: Unicode ,x
: Leerzeichen erweitert c
: aktuelle Position Perle
: Ausdruck PHP Perlo
: einmal Rubinm
: Multiline PHP Perl Python Javascript .net Java ,m
: (nicht) Multiline Rubys
: einzelne Zeile (nicht von Javascript oder Ruby unterstützt ),s
Problemumgehung von JavascriptS
: Studie phpU
: ungreedy php r- Wie konvertiere ich preg_replace e in preg_replace_callback?
- Was sind Inline-Modifikatoren?
- Was ist '? -Mix' in einem regulären Ruby-Ausdruck
Andere:
|
: Wechseloperator (ODER) ,.
: beliebiges Zeichen ,[.]
: wörtliches Punktzeichen- Welche Sonderzeichen müssen maskiert werden?
- Steuer Verben ( php und perl ):
(*PRUNE)
,(*SKIP)
,(*FAIL)
und(*F)
- Nur PHP :
(*BSR_ANYCRLF)
- Nur PHP :
- Rekursion ( php und perl ):
(?R)
,(?0)
und(?1)
,(?-1)
,(?&groupname)
Allgemeine Aufgaben
- Holen Sie sich eine Schnur zwischen zwei geschweiften Klammern:
{...}
- Passen Sie ein Muster an (oder ersetzen Sie es), außer in den Situationen s1, s2, s3 ...
- Wie finde ich alle YouTube-Video-IDs in einer Zeichenfolge mithilfe eines regulären Ausdrucks?
- Validierung:
- Internet: E-Mail-Adressen , URLs (Host / Port: Regex- und Nicht-Regex- Alternativen), Passwörter
- Numerisch: eine Zahl , Min-Max-Bereiche (wie 1-31) , Telefonnummern , Datum
- Analysieren von HTML mit Regex: Siehe "Allgemeine Informationen> Wann sollte Regex nicht verwendet werden?"
Fortgeschrittenes Regex-Fu
- Zeichenfolgen und Zahlen:
- Regulärer Ausdruck für eine Zeile, die kein Wort enthält
- Wie erkennt dieses PCRE-Muster Palindrome?
- Match-Strings, deren Länge eine vierte Potenz ist
- Wie findet dieser Regex dreieckige Zahlen?
- Wie kann man feststellen, ob eine Zahl eine Primzahl mit Regex ist?
- Wie kann man das mittlere Zeichen in einer Zeichenfolge mit Regex abgleichen?
- Andere:
- Wie können wir ein ^ nb ^ n mit Java-Regex abgleichen?
- Passen Sie verschachtelte Klammern an
- "Vertikaler" Regex-Abgleich in einem ASCII- "Bild"
- Liste der hoch bewerteten Regex-Fragen zu Code Golf
- Wie lassen sich zwei Quantifizierer gleich oft wiederholen?
- Ein unübertroffener regulärer Ausdruck:
(?!a)a
- Übereinstimmen / Löschen / Ersetzen
this
außer in den Kontexten A, B und C. - Verschachtelte Klammern mit Regex abgleichen, ohne Rekursions- oder Ausgleichsgruppen zu verwenden?
Geschmacksspezifische Informationen
(Mit Ausnahme der mit gekennzeichneten *
enthält dieser Abschnitt Links, die keine Stapelüberläufe sind.)
- Java
- Offizielle Dokumentation: Pattern Javadoc , das Tutorial für reguläre Ausdrücke von Oracle
- Die Unterschiede zwischen den Funktionen in
java.util.regex.Matcher
:matches()
): Das Match muss sowohl am Input-Start als auch am -end verankert seinfind()
): Eine Übereinstimmung kann sich an einer beliebigen Stelle in der Eingabezeichenfolge befinden (Teilzeichenfolgen)lookingAt()
: Das Match darf nur am Input-Start verankert werden- (Für Anker im Allgemeinen siehe Abschnitt "Anker")
- Die einzigen
java.lang.String
Funktionen , die regulären Ausdrücke akzeptieren:matches(s)
,replaceAll(s,s)
,replaceFirst(s,s)
,split(s)
,split(s,i)
- * Eine (meinungsgebundene und) ausführliche Diskussion der Nachteile und fehlenden Funktionen in
java.util.regex
- .NETZ
- Offizielle Dokumentation:
- Boost-Regex-Engine: Allgemeine Syntax , Perl-Syntax (verwendet von TextPad, Sublime Text, UltraEdit, ... ???)
- Allgemeine Informationen zu JavaScript 1.5 und RegExp-Objekt
- .NET
- PHP: Mustersyntax ,
preg_match
- Python: Operationen mit regulären Ausdrücken ,
search
vsmatch
, How-to - Splunk: Regex-Terminologie und -Syntax sowie Regex-Befehl
- Tcl: Regex-Syntax , Manpage ,
regexp
Befehl - Visual Studio Suchen und Ersetzen
Allgemeine Information
(Mit gekennzeichnete Links *
sind Nicht-Stapelüberlauf-Links.)
- Weitere allgemeine Dokumentationsressourcen: Lernen regulärer Ausdrücke , * Regular-expressions.info , * Wikipedia-Eintrag , * RexEgg , Open-Directory-Projekt
- DFA gegen NFA
- Generieren von Strings, die zu Regex passen
- Bücher: Jeffrey Friedls Mastering Regular Expressions
- Wann Sie keine regulären Ausdrücke verwenden sollten:
- Einige Leute denken, wenn sie mit einem Problem konfrontiert werden: "Ich weiß, ich werde reguläre Ausdrücke verwenden." Jetzt haben sie zwei Probleme. (Blogbeitrag desGründersvon Stack Overflow ) *
- Verwenden Sie keinen regulären Ausdruck, um HTML zu analysieren:
- Tu es nicht .
- Na ja, vielleicht ... wenn Sie wirklich entschlossen sind (andere Antworten in dieser Frage sind auch gut)
- Tu es nicht .
Beispiele für Regex, die dazu führen können, dass die Regex-Engine ausfällt
Tools: Tester und Erklärer
(Dieser Abschnitt enthält Nicht-Stapelüberlauf-Links.)
Online (* beinhaltet Ersatztester, + beinhaltet Split-Tester) :
- Debuggex (hat auch ein Repository mit nützlichen Regexen) Javascript , Python , PCRE
- * Reguläre Ausdrücke 101 PHP , PCRE , Python , Javascript
- Regex Pal , reguläres-expressions.info Javascript
- Rubular Rubin
- * + 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 und POSIX, Javascript
regex.larsolavtorvik.com
- Refiddle Javascript Ruby .net
Offline:
- Microsoft Windows: RegexBuddy (Analyse), RegexMagic (Erstellung), Expresso (Analyse, Erstellung, kostenlos)