English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Regulärer AusdrucksweiseEs ist eine spezielle Zeichenfolge, die durch die Verwendung eines speziellen Grammatikmusters zur Übereinstimmung oder zum Suchen von Zeichenfolgenkombinationen verwendet wird.
Eine reguläre Ausdrucksweise besteht aus einigen speziell definierten Zeichen und Kombinationen dieser Zeichen, die eine "Regelzeichenkette" bilden, die verwendet wird, um eine Art Filterlogik für Zeichenfolgen auszudrücken.
Regulärer AusdrucksweiseSie ist im Wesentlichen ein Muster zwischen zwei Schrägstrichen oder zwischen einem beliebigen Trennzeichen, das nach %r folgt, wie folgt dargestellt:
/pattern/ /pattern/im # Sie können Optionen angeben %r!/usr/local! # Verwenden Sie den Trennzeichen reguläre Ausdrucksweise
#!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
The output result of the above example is:
Line1 contains Cats
Eine reguläre Ausdrucksweise kann auf den ersten Blick einen optionalen Modifikator enthalten, der die verschiedenen Aspekte der Übereinstimmung steuert. Der Modifikator wird nach dem zweiten Schrägstrich angegeben, wie in den obigen Beispielen gezeigt. Die nachstehende Tabelle listet mögliche Modifikatoren auf:
Modifikator | Beschreibung |
---|---|
i | Ignorieren Sie die Groß- und Kleinschreibung beim Matchen des Textes. |
o | Führen Sie nur einmal die Interpolation #{} aus, die reguläre Ausdrucksweise wird bereits beim ersten Mal beurteilt. |
x | Ignorieren Sie Leerzeichen, es sind im gesamten Ausdruck Leerzeichen und Anmerkungen erlaubt. |
m | Passen Sie Zeilen mehrfach, erkennen Sie den Zeilenumbruch als normalen Zeichen. |
u,e,s,n | Den regulären Ausdruck als Unicode (UTF-8)、EUC、SJIS oder ASCII. Wenn kein Modifikator angegeben ist, wird angenommen, dass der reguläre Ausdruck die Quellencodierung verwendet. |
wie Strings durch %Q getrennt werden, ermöglicht Ruby Ihnen, %r als Anfang des regulären Ausdrucks zu verwenden, gefolgt von jedem Trennzeichen. Dies ist sehr nützlich, wenn Sie viele Schrägstriche haben, die Sie nicht escapen möchten.
# Below matches a single slash character, not escaped %r|/| # Flag Zeichen können durch die folgende Syntax gematcht werden %r[</(.*)>]i
außer den Steuerzeichen,(+ ? . * ^ $ ( ) [ ] { } | \), andere alle Zeichen passen sich selbst an. Sie können die Steuerzeichen durch das Voranstellen eines Backslashes escapen.
Die nachstehende Tabelle listet die regulären Ausdrucksgrammatiken, die in Ruby verfügbar sind, auf.
Muster | Beschreibung |
---|---|
^ | Passen Sie den Anfang der Zeile. |
$ | Passen Sie das Ende der Zeile. |
. | Passen Sie jedes einzelne Zeichen, das nicht den Zeilenumbruch ist. Wenn die Option m verwendet wird, kann es auch den Zeilenumbruch passen. |
[...] | Passen Sie jedes einzelne Zeichen, das in eckigen Klammern steht. |
[^...] | Passen Sie jedes einzelne Zeichen, das nicht in eckigen Klammern steht. |
re* | Passen Sie das vorangegangene Untermuster null Mal oder mehr. |
re+ | Passen Sie das vorangegangene Untermuster einmal oder mehr. |
re? | Passen Sie das vorangegangene Untermuster null Mal oder einmal. |
re{ n} | Passen Sie das vorangegangene Untermuster n Mal. |
re{ n,} | Passen Sie das vorangegangene Untermuster n Mal oder n Mal mehr. |
re{ n, m} | Passen Sie das vorangegangene Untermuster mindestens n Mal bis höchstens m Mal. |
a| b | Passen Sie a oder b. |
(re) | Gruppieren Sie den regulären Ausdruck und erinnern Sie sich an die passenden Texte. |
(?imx) | Schalten Sie vorläufig die Optionen i, m oder x im regulären Ausdruck ein. Wenn es in Klammern ist, beeinflusst es nur den Teil in den Klammern. |
(?-imx) | Schalten Sie vorläufig die Optionen i, m oder x im regulären Ausdruck aus. Wenn es in Klammern ist, beeinflusst es nur den Teil in den Klammern. |
(?: re) | Gruppieren Sie den regulären Ausdruck, aber erinnern Sie sich nicht an die passenden Texte. |
(?imx: re) | Schalten Sie vorläufig die Optionen i, m oder x im geschweiften Klammer ein. |
(?-imx: re) | Schalten Sie vorläufig die Optionen i, m oder x im geschweiften Klammer aus. |
(?#...) | Kommentare. |
(?= re) | Verwenden Sie das Muster, um Positionen zu spezifizieren. Es gibt keine Reichweite. |
(?! re) | Verwenden Sie die Negation des Musters, um Positionen zu spezifizieren. Es gibt keine Reichweite. |
(?> re) | Passen Sie ein unabhängiges Muster ohne Rückverfolgung. |
\w | Passen Sie wortartige Zeichen. |
\W | Passen Sie nicht-wortartige Zeichen. |
\s | Matchen Sie ein leeres Zeichen. Äquivalent zu [\t\n\r\f]。 |
\S | Matchen Sie ein nicht-leeres Zeichen. |
\d | Matchen Sie ein numerisches Zeichen. Äquivalent zu [0-9]。 |
\D | Matchen Sie ein nicht-numerisches Zeichen. |
\A | Matchen Sie den Anfang des Strings. |
\Z | Matchen Sie das Ende des Strings. Wenn ein Zeilenumbruch vorhanden ist, wird nur bis zum Zeilenumbruch matchen. |
\z | Matchen Sie das Ende des Strings. |
\G | Matchen Sie den letzten Punkt, der matchen wurde. |
\b | Matchen Sie das Wortgrenzzeichen außen vor den Klammern, innen in den Klammern matchen Sie den Backspace (0x08)。 |
\B | Matchen Sie ein nicht-wortartiges Grenzzeichen. |
\n, \t, etc. | Matchen Sie Zeilenumbruch, Carriage Return, Tab, etc. |
\1...\9 | Matchen Sie den n-ten Gruppeneintrag. |
\10 | Wenn bereits gematcht, dann matchen Sie den n-ten Gruppeneintrag. Andernfalls zeigen Sie auf die oktale Darstellung der Zeichencodierung. |
Beispiel | Beschreibung |
---|---|
/ruby/ | Matchen Sie "ruby" |
¥ | Matchen Sie das Yen-Zeichen. Ruby 1.9 und Ruby 1.8 Unterstützt mehrere Zeichen. |
Beispiel | Beschreibung |
---|---|
/[Rr]uby/ | Matchen Sie "Ruby" oder "ruby" |
/rub[ye]/ | Passt "ruby" oder "rube" |
/[aeiou]/ | Matchen Sie jedes kleine Vokal |
/[0-9]/ | Matchen Sie jedes Zeichen, das mit /[0123456789]/ Gleich |
/[a-z]/ | Matchen Sie jedes kleine ASCII-Buchstabe |
/[A-Z]/ | Matchen Sie jedes große ASCII-Buchstabe |
/[a-zA-Z0-9]/ | Matchen Sie jedes Zeichen im eckigen Klammer |
/[^aeiou]/ | Matchen Sie jedes Zeichen außer den kleinen Vokalen |
/[^0-9]/ | Matchen Sie jedes nicht-numerische Zeichen |
Beispiel | Beschreibung |
---|---|
/./ | Matchen Sie jedes Zeichen außer dem Zeilenumbruch |
/./m | Auch in Zeilenmodus können Zeilenumbrüche matchen |
/\d/ | Matchen Sie ein numerisches Zeichen, das äquivalent ist zu /[0-9]/ |
/\D/ | Matchen Sie ein nicht-numerisches Zeichen, das äquivalent ist zu /[^0-9]/ |
/\s/ | Matchen Sie ein leeres Zeichen, das äquivalent ist zu /[ \t\r\n\f]/ |
/\S/ | Matchen Sie ein nicht-leeres Zeichen, das äquivalent ist zu /[^ \t\r\n\f]/ |
/\w/ | Matchen Sie ein wortartiges Zeichen, das äquivalent ist zu /[A-Za-z0-9_]/ |
/\W/ | Matchen Sie ein nicht-wortartiges Zeichen, das äquivalent ist zu /[^A-Za-z0-9_]/ |
Beispiel | Beschreibung |
---|---|
/ruby?/ | Matchen Sie "rub" oder "ruby". Der y ist optional. |
/ruby*/ | Matchen Sie "rub" zusammen mit 0 oder mehreren der y. |
/ruby+/ | Matchen Sie "rub" zusammen mit 1 eine oder mehrere der y. |
/\d{3}/ | Genau matchen 3 eine Nummer. |
/\d{3,}/ | Matchen 3 eine oder mehrere Nummern. |
/\d{3,5}/ | Matchen 3 oder4 oder 5 eine Nummer. |
Dies entspricht der kleinsten Anzahl der Wiederholungen.
Beispiel | Beschreibung |
---|---|
/<.*>/ | Gierige Wiederholung: Matchen Sie "<ruby>perl>" |
/<.*?>/ | Nicht-gierige Wiederholung: Matchen Sie "<ruby>perl>" im "<ruby>". |
Beispiel | Beschreibung |
---|---|
/\D\d+/ | Keine Gruppierung: + Wiederhole \d |
/(\D\d)+/ | Gruppierung: + Wiederhole \D\d-Paare |
/([Rr]uby(, )?)+/ | Passt "Ruby", "Ruby, ruby, ruby" und so weiter |
Dies wird die zuvor erfassten Gruppen erneut passen.
Beispiel | Beschreibung |
---|---|
/([Rr])uby&\1ails/ | Passt ruby&rails oder Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | einfache oder doppelte Anführungszeichen-Zeichenketten.\1 Passt den Text, der von der ersten Gruppe erfasst wurde, \2 Passt den Text, der von der zweiten Gruppe erfasst wurde, und so weiter. |
Beispiel | Beschreibung |
---|---|
/ruby|rube/ | Passt "ruby" oder "rube" |
/rub(y|le)/ | Passt "ruby" oder "ruble" |
/ruby(!+|\?)/ | "ruby" gefolgt von einem oder mehreren ! oder von einem ? |
Dies erfordert die Angabe des Positionszeichens.
Beispiel | Beschreibung |
---|---|
/^Ruby/ | Passt eine Zeichenkette, die mit "Ruby" beginnt oder eine Zeile |
/Ruby$/ | Passt eine Zeichenkette, die mit "Ruby" endet oder eine Zeile |
/\ARuby/ | Passt eine Zeichenkette, die mit "Ruby" beginnt |
/Ruby\Z/ | Passt eine Zeichenkette, die mit "Ruby" endet |
/\bRuby\b/ | Passt den Wortrand "Ruby" |
/\brub\B/ | \B ist ein nicht-wortlicher Rand: Passt "rube" und "ruby" im "rub", aber nicht als einzelnes "rub" |
/Ruby(?=!)/ | Passt "Ruby" nach einem Ausrufezeichen, dann wird "Ruby" gepasst |
/Ruby(?!!)/ | Passt "Ruby" nicht nach einem Ausrufezeichen, dann wird "Ruby" gepasst |
Beispiel | Beschreibung |
---|---|
/R(?#comment)/ | passt "R". Alle verbleibenden Zeichen sind Kommentare. |
/R(?i)uby/ | passt "uby" ohne Unterschied in Gross- und Kleinschreibung. |
/R(?i:uby)/ | ist gleich dem Oberen. |
/rub(?:y|le))/ | nur gruppieren, ohne zu \1 Rückbezug |
sub und gsub und ihre Ersatz-Variable sub! und gsub! sind wichtige Zeichenkettenmethoden, wenn reguläre Ausdrücke verwendet werden.
Alle diese Methoden führen Such- und Ersetzungsoperationen mit regulären Ausdrucksmustern durch.sub und sub! ersetzt das erste Erscheinen des Musters.gsub und gsub! ersetzt alle Erscheinungen des Musters.
sub und gsub gibt eine neue Zeichenkette zurück, ohne die ursprüngliche zu ändern, und sub! und gsub! dann wird ihre aufgerufenen Strings geändert.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 # Dies ist eine Telefonnummer" # Entfernen von Ruby-Kommentaren phone = phone.sub!(/#.*$/, ") puts "Phone Number : #{phone}" # Remove all characters except numbers phone = phone.gsub!("/\D/, ") puts "Phone Number : #{phone}"
The output result of the above example is:
Phone Number : 138-3453-1111 Phone Number : 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails is rails, Ruby on Rails is a very good Ruby framework" # Change all occurrences of "rails" to "Rails" text.gsub!("rails", "Rails") # Change all occurrences of the word "Rails" to uppercase text.gsub!("/\brails\b/, "Rails") puts "#{text}"
The output result of the above example is:
Rails is a very good Ruby framework for Ruby on Rails