English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby Regular Expressions

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.

Syntax

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

Online Examples

#!/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

Regulärer Ausdrucksweise Modifikator

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:

ModifikatorBeschreibung
iIgnorieren Sie die Groß- und Kleinschreibung beim Matchen des Textes.
oFühren Sie nur einmal die Interpolation #{} aus, die reguläre Ausdrucksweise wird bereits beim ersten Mal beurteilt.
xIgnorieren Sie Leerzeichen, es sind im gesamten Ausdruck Leerzeichen und Anmerkungen erlaubt.
mPassen Sie Zeilen mehrfach, erkennen Sie den Zeilenumbruch als normalen Zeichen.
u,e,s,nDen 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

Regulärer Ausdrucksmodus

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.

MusterBeschreibung
^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| bPassen 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.
\wPassen Sie wortartige Zeichen.
\WPassen Sie nicht-wortartige Zeichen.
\sMatchen Sie ein leeres Zeichen. Äquivalent zu [\t\n\r\f]。
\SMatchen Sie ein nicht-leeres Zeichen.
\dMatchen Sie ein numerisches Zeichen. Äquivalent zu [0-9]。
\DMatchen Sie ein nicht-numerisches Zeichen.
\AMatchen Sie den Anfang des Strings.
\ZMatchen Sie das Ende des Strings. Wenn ein Zeilenumbruch vorhanden ist, wird nur bis zum Zeilenumbruch matchen.
\zMatchen Sie das Ende des Strings.
\GMatchen Sie den letzten Punkt, der matchen wurde.
\bMatchen Sie das Wortgrenzzeichen außen vor den Klammern, innen in den Klammern matchen Sie den Backspace (0x08)。
\BMatchen Sie ein nicht-wortartiges Grenzzeichen.
\n, \t, etc.Matchen Sie Zeilenumbruch, Carriage Return, Tab, etc.
\1...\9Matchen Sie den n-ten Gruppeneintrag.
\10Wenn bereits gematcht, dann matchen Sie den n-ten Gruppeneintrag. Andernfalls zeigen Sie auf die oktale Darstellung der Zeichencodierung.

Beispiel für reguläre Ausdrücke

Zeichen

BeispielBeschreibung
/ruby/Matchen Sie "ruby"
¥Matchen Sie das Yen-Zeichen. Ruby 1.9 und Ruby 1.8 Unterstützt mehrere Zeichen.

Zeichenklasse

BeispielBeschreibung
/[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

Spezialcharakterklassen

BeispielBeschreibung
/./Matchen Sie jedes Zeichen außer dem Zeilenumbruch
/./mAuch 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_]/

Wiederholen

BeispielBeschreibung
/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.

Nicht-gierige Wiederholung

Dies entspricht der kleinsten Anzahl der Wiederholungen.

BeispielBeschreibung
/<.*>/Gierige Wiederholung: Matchen Sie "<ruby>perl>"
/<.*?>/Nicht-gierige Wiederholung: Matchen Sie "<ruby>perl>" im "<ruby>".

Die Gruppierung erfolgt durch runde Klammern.

BeispielBeschreibung
/\D\d+/Keine Gruppierung: + Wiederhole \d
/(\D\d)+/Gruppierung: + Wiederhole \D\d-Paare
/([Rr]uby(, )?)+/Passt "Ruby", "Ruby, ruby, ruby" und so weiter

Rückbezug

Dies wird die zuvor erfassten Gruppen erneut passen.

BeispielBeschreibung
/([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.

Ersetzen

BeispielBeschreibung
/ruby|rube/Passt "ruby" oder "rube"
/rub(y|le)/Passt "ruby" oder "ruble"
/ruby(!+|\?)/"ruby" gefolgt von einem oder mehreren ! oder von einem ?

Anker

Dies erfordert die Angabe des Positionszeichens.

BeispielBeschreibung
/^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

Besondere Syntax von runden Klammern

BeispielBeschreibung
/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

Suchen und Ersetzen

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.

Online Examples

#!/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

Online Examples

#!/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