Ruby Reguläre Ausdrücke
Reguläre Ausdrückesind eine spezielle Zeichenfolge, die mithilfe eines Musters mit spezialisierter Syntax eine Sammlung von Zeichenketten abgleicht oder durchsucht.
Reguläre Ausdrücke verwenden eine vordefinierte Menge spezifischer Zeichen und Kombinationen dieser Zeichen, um eine "Regelzeichenfolge" zu bilden, die verwendet wird, um eine Filterlogik für Zeichenketten auszudrücken.
Syntax
Reguläre AusdrückeWörtlich ist es ein Muster zwischen Schrägstrichen oder zwischen beliebigen Trennzeichen nach %r, wie unten gezeigt:
Beispiele
Ausprobieren »
Die Ausgabe des obigen Beispiels ist:
Line1 contains Cats
Modifikatoren für reguläre Ausdrücke
Ein regulärer Ausdruck kann einen optionalen Modifikator enthalten, um verschiedene Aspekte des Abgleichs zu steuern. Der Modifikator wird nach dem zweiten Slash-Zeichen angegeben, wie im obigen Beispiel gezeigt. Die folgende Tabelle listet die möglichen Modifikatoren auf:
| Modifizierer | Beschreibung |
|---|---|
| i | Ignoriert Groß- und Kleinschreibung beim Abgleich von Text. |
| o | Führt #{} Interpolation nur einmal aus; der reguläre Ausdruck wird beim ersten Mal ausgewertet. |
| x | Ignoriert Leerzeichen, sodass Leerraum und Kommentare innerhalb des gesamten Ausdrucks platziert werden können. |
| m | Mehrere Zeilen abgleichen, wobei Zeilenumbruchzeichen als normale Zeichen behandelt werden. |
| u,e,s,n | Interpretiert den regulären Ausdruck als Unicode (UTF-8), EUC, SJIS oder ASCII. Wenn kein Modifikator angegeben ist, wird davon ausgegangen, dass der reguläre Ausdruck die Quellkodierung verwendet. |
So wie Zeichenketten durch %Q begrenzt werden, erlaubt Ruby die Verwendung von %r als Anfang eines regulären Ausdrucks, gefolgt von einem beliebigen Begrenzer. Dies ist sehr nützlich, wenn Muster beschrieben werden, die viele Schrägstriche enthalten, die Sie nicht escapen möchten.
Muster für reguläre Ausdrücke
Mit Ausnahme von Steuerzeichen,(+ ? . * ^ $ ( ) [ ] { } | \)stimmen alle anderen Zeichen mit sich selbst überein. Sie können Steuerzeichen escapen, indem Sie einen Backslash davor setzen.
Die folgende Tabelle listet die in Ruby verfügbare Syntax für reguläre Ausdrücke auf.
| Muster | Beschreibung |
|---|---|
| ^ | Entspricht dem Anfang einer Zeile. |
| $ | Entspricht dem Ende einer Zeile. |
| . | Entspricht einem beliebigen einzelnen Zeichen außer Zeilenumbruch. Mit der Option m entspricht es auch einem Zeilenumbruch. |
| [...] | Entspricht einem beliebigen einzelnen Zeichen in eckigen Klammern. |
| [^...] | Entspricht einem beliebigen einzelnen Zeichen, das nicht in eckigen Klammern enthalten ist. |
| re* | Entspricht dem vorausgehenden Teilausdruck null- oder mehrmals. |
| re+ | Entspricht dem vorausgehenden Teilausdruck ein- oder mehrmals. |
| re? | Entspricht dem vorausgehenden Teilausdruck null oder einmal. |
| re{ n} | Entspricht dem vorausgehenden Teilausdruck genau n-mal. |
| re{ n,} | Entspricht dem vorausgehenden Teilausdruck n-mal oder öfter. |
| re{ n, m} | Entspricht dem vorausgehenden Teilausdruck mindestens n-mal und höchstens m-mal. |
| a| b | Entspricht a oder b. |
| (re) | Gruppiert einen regulären Ausdruck und merkt sich den übereinstimmenden Text. |
| (?imx) | Schaltet die Option i, m oder x innerhalb des regulären Ausdrucks vorübergehend ein. Wenn sie sich innerhalb von Klammern befindet, wirkt sie nur auf den Teil innerhalb der Klammern. |
| (?-imx) | Schaltet die Option i, m oder x innerhalb des regulären Ausdrucks vorübergehend aus. Wenn sie sich innerhalb von Klammern befindet, wirkt sie nur auf den Teil innerhalb der Klammern. |
| (?: re) | Gruppiert einen regulären Ausdruck, merkt sich aber nicht den übereinstimmenden Text. |
| (?imx: re) | Schaltet die Optionen i, m oder x innerhalb von Klammern vorübergehend ein. |
| (?-imx: re) | Schaltet die Optionen i, m oder x innerhalb von Klammern vorübergehend aus. |
| (?#...) | Kommentar. |
| (?= re) | Legt eine Position mithilfe eines Musters fest. Hat keinen Bereich. |
| (?! re) | Legt eine Position mithilfe eines negierten Musters fest. Hat keinen Bereich. |
| (?> re) | Entspricht einem unabhängigen Muster ohne Backtracking. |
| \w | Entspricht einem Wortzeichen. |
| \W | Entspricht einem Nicht-Wortzeichen. |
| \s | Entspricht einem Leerraumzeichen. Äquivalent zu [\t\n\r\f]. |
| \S | Stimmt mit einem Nicht-Leerzeichen-Zeichen überein. |
| \d | Stimmt mit einer Ziffer überein. Äquivalent zu [0-9]. |
| \D | Stimmt mit einem Nicht-Ziffer-Zeichen überein. |
| \A | Stimmt mit dem Anfang einer Zeichenkette überein. |
| \Z | Stimmt mit dem Ende der Zeichenkette überein. Wenn ein Zeilenumbruch vorhanden ist, stimmt es nur vor dem Zeilenumbruch überein. |
| \z | Entspricht dem Ende der Zeichenkette. |
| \G | Stimmt mit der Stelle überein, an der der letzte Treffer abgeschlossen wurde. |
| \b | Stimmt mit einer Wortgrenze außerhalb von Klammern überein; stimmt mit einem Backspace (0x08) innerhalb von Klammern überein. |
| \B | Stimmt mit einer Nicht-Wortgrenze überein. |
| \n, \t, usw. | Stimmt mit Zeilenumbruch, Wagenrücklauf, Tabulator usw. überein. |
| \1...\9 | Stimmt mit dem n-ten gruppierten Teilausdruck überein. |
| \10 | Wenn es bereits übereingestimmt hat, stimmt es mit dem n-ten gruppierten Teilausdruck überein. Andernfalls bezieht es sich auf die oktale Darstellung einer Zeichenkodierung. |
Beispiele für reguläre Ausdrücke
Zeichen
| Beispiele | Beschreibung |
|---|---|
| /ruby/ | Stimmt mit "ruby" überein |
| ¥ | Entspricht dem Yen-Zeichen. Ruby 1.9 und Ruby 1.8 unterstützen mehrere Zeichen. |
Zeichenklassen
| Beispiele | Beschreibung |
|---|---|
| /[Rr]uby/ | Entspricht "Ruby" oder "ruby" |
| /rub[ye]/ | Entspricht "ruby" oder "rube" |
| /[aeiou]/ | Entspricht einem beliebigen kleingeschriebenen Vokal |
| /[0-9]/ | Entspricht einer beliebigen Ziffer, wie / |
| /[a-z]/ | Entspricht einem beliebigen kleingeschriebenen ASCII-Buchstaben |
| /[A-Z]/ | Entspricht einem beliebigen großgeschriebenen ASCII-Buchstaben |
| /[a-zA-Z0-9]/ | Entspricht einem beliebigen Zeichen in den eckigen Klammern |
| /[^aeiou]/ | Entspricht jedem Zeichen, das kein kleingeschriebener Vokal ist |
| /[^0-9]/ | Entspricht jedem Zeichen, das keine Ziffer ist |
Spezielle Zeichenklassen
| Beispiele | Beschreibung |
|---|---|
| /./ | Entspricht jedem Zeichen außer Zeilenumbruch |
| /./m | Entspricht im Mehrzeilenmodus auch einem Zeilenumbruch |
| /\d/ | Entspricht einer Ziffer, äquivalent zu /[0-9]/ |
| /\D/ | Entspricht einer Nicht-Ziffer, äquivalent zu /[^0-9]/ |
| /\s/ | Entspricht einem Whitespace-Zeichen, äquivalent zu /[ \t\r\n\f]/ |
| /\S/ | Entspricht einem Nicht-Whitespace-Zeichen, äquivalent zu /[^ \t\r\n\f]/ |
| /\w/ | Entspricht einem Wortzeichen, äquivalent zu /[A-Za-z0-9_]/ |
| /\W/ | Entspricht einem Nicht-Wortzeichen, äquivalent zu /[^A-Za-z0-9_]/ |
Wiederholung
| Beispiele | Beschreibung |
|---|---|
| /ruby?/ | Entspricht "rub" oder "ruby". Das y ist optional. |
| /ruby*/ | Entspricht "rub" plus null oder mehr y's. |
| /ruby+/ | Entspricht "rub" plus ein oder mehr y's. |
| /\d{3}/ | Entspricht genau 3 Ziffern. |
| /\d{3,}/ | Entspricht 3 oder mehr Ziffern. |
| /\d{3,5}/ | Entspricht 3, 4 oder 5 Ziffern. |
Nicht-gierige Wiederholung
Dies entspricht der kleinsten Anzahl an Wiederholungen.
| Beispiele | Beschreibung |
|---|---|
| /<.*>/ | Gierige Wiederholung: entspricht "<ruby>perl>" |
| /<.*?>/ | Nicht-gierige Wiederholung: entspricht "<ruby>" in "<ruby>perl>" |
Gruppierung mit runden Klammern
| Beispiele | Beschreibung |
|---|---|
| /\D\d+/ | Ohne Gruppierung: + wiederholt \d |
| /(\D\d)+/ | Mit Gruppierung: + wiederholt das Paar \D\d |
| /([Rr]uby(, )?)+/ | Trifft auf "Ruby", "Ruby, ruby, ruby" usw. zu |
Rückverweise
Dies trifft erneut auf eine zuvor gefundene Gruppe zu.
| Beispiele | Beschreibung |
|---|---|
| /([Rr])uby&\1ails/ | Trifft auf ruby&rails oder Ruby&Rails zu |
| /(['"])(?:(?!\1).)*\1/ | Zeichenketten in einfachen oder doppelten Anführungszeichen. \1 stimmt mit den Zeichen überein, die von der ersten Gruppe gefunden wurden, \2 stimmt mit denen überein, die von der zweiten Gruppe gefunden wurden, und so weiter. |
Alternation
| Beispiele | Beschreibung |
|---|---|
| /ruby|rube/ | Entspricht "ruby" oder "rube" |
| /rub(y|le)/ | Trifft auf "ruby" oder "ruble" zu |
| /ruby(!+|\?)/ | "ruby" gefolgt von einem oder mehreren ! oder einem ? |
Anker
Dies erfordert die Angabe einer Übereinstimmungsposition.
| Beispiele | Beschreibung |
|---|---|
| /^Ruby/ | Entspricht einer Zeichenkette oder Zeile, die mit "Ruby" beginnt |
| /Ruby$/ | Entspricht einer Zeichenkette oder Zeile, die mit "Ruby" endet |
| /\ARuby/ | Entspricht einer Zeichenkette, die mit "Ruby" beginnt |
| /Ruby\Z/ | Entspricht einer Zeichenkette, die mit "Ruby" endet |
| /\bRuby\b/ | Entspricht "Ruby" an einer Wortgrenze |
| /\brub\B/ | \B ist eine Nicht-Wortgrenze: stimmt mit "rub" in "rube" und "ruby" überein, aber nicht mit einem eigenständigen "rub" |
| /Ruby(?=!)/ | Trifft auf "Ruby" zu, wenn ein Ausrufezeichen folgt |
| /Ruby(?!!)/ | Trifft auf "Ruby" zu, wenn kein Ausrufezeichen folgt |
Spezielle Syntax für Klammern
| Beispiele | Beschreibung |
|---|---|
| /R(?#comment)/ | Trifft auf "R" zu. Alle übrigen Zeichen sind Kommentare. |
| /R(?i)uby/ | Groß-/Kleinschreibung wird beim Abgleich mit "uby" nicht unterschieden. |
| /R(?i:uby)/ | Wie oben. |
| /rub(?:y|le))/ | Nur Gruppe, kein \1-Rückverweis |
Suchen und Ersetzen
subundgsubund ihre Substitutionsvariablensub!undgsub!sind wichtige String-Methoden bei der Verwendung regulärer Ausdrücke.
Alle diese Methoden führen Such- und Ersetzungsoperationen unter Verwendung von Mustern regulärer Ausdrücke durch.subundsub!Ersetzt das erste Vorkommen des Musters,gsubundgsub!Ersetzt alle Vorkommen des Musters.
subundgsubGibt eine neue Zeichenkette zurück, wobei die ursprüngliche Zeichenkette unverändert bleibt, währendsub!undgsub!verändert die Zeichenkette, auf der sie aufgerufen werden.
Beispiele
Ausprobieren »
Die Ausgabe des obigen Beispiels ist:
电话号码 : 138-3453-1111 电话号码 : 13834531111
Beispiele
Ausprobieren »
Die Ausgabe des obigen Beispiels ist:
Rails 是 Rails, Ruby on Rails 非常好的 Ruby 框架Weitere Erweiterungen