// you’re reading...

Featured

Ruby und Regular Expressions (Regex)


Wie zahlreiche andere Scriptsprachen beherrscht auch Ruby reguläre Audrücke. Diese dienen dazu in Strings verschiedene Muster wiederzuerkennen. So kann zum Beispiel eine Emailadresse auf ein korrektes Format überprüft werden (siehe Beispiel unten).

Jede Regular Expression (kurz "regex") beginnt und endet in Ruby mit einem / (Slash). Diese stehen zur gleichen Zeit auch als Begrenzer.

So wie Ruby mit

 text = "Codegods erklären regex."

erkennt, dass es sich bei text um einen String handelt, erkennt Ruby auch, dass es sich bei

 regex = /\d/

die Variable regex vom Typ Regexp ist. Nebenbei kann mit regex erkannt werden, ob ein String eine Ziffer (\d) enthält, oder kann zum Beispiel einen String anhand dieses Musters aufsplitten. Mehr dazu unten.

Ausdruck Bedeutung
. (Punkt) Genau ein beliebiges Zeichen
\s Genau ein beliebiges Whitespace-Zeichen. (Zeilenumbruch, Blank, Tabulator, ...)
\S Genau ein beliebiges Zeichen, jedoch kein Whitespace-Zeichen.
\d Genau eine Ziffer
\D Genau ein Zeichen, jedoch keine Ziffer
\w Genau ein Word-Character (Buchstabe, Zahl, Unterstrich)
\W Genau ein Zeichen, jedoch kein Word-Character
\b Genau ein Wortbegrenzungszeichen
[abc] Genau ein a, b oder c
[^abc] Genau ein Zeichen, jedoch nicht a, b oder c
[a-z] Genau ein Zeichen von a bis z
[a-zA-Z] Genau ein Zeichen von a bis z ODER A - Z
^ Zeilenanfang
$ Zeilenende
\A Anfang des Strings
\z Ende des Strings
(...) Erkennt alles zwischen den Klammern
(a|b) Erkennt a oder b, wobei a und b auch wieder Ausdrücke sind
a? Erkennt den Ausdruck a 0 oder 1 mal
a* Erkennt den Ausdruck a beliebig oft hintereinander
a* Erkennt den Ausdruck a beliebig oft, jedoch mindestens einmal
a{4} Erkennt den Ausdruck a genau 4 mal
a{4,} Erkennt den Ausdruck a mindestens 4 mal
a{4,8} Erkennt den Ausdruck a 4 bis 8 mal
Befehl nach / am ende des Ausdrucks Bedeutung
/i Veranlasst Ruby "case insensitive" zu suchen, dh. Groß-/Kleinschreibung zu ignorieren
/m Ruby erkennt Zeilenumbrüche als beliebiges Zeichen
/x Ruby ignoriert Whitespaces zwischen Teilen
/o Es wird nur das erste Vorkommnis ersetzt (nur bei Replace)

Alle Möglichkeiten auf einen Blick

Ein einfaches Beispiel
Als erstes einfaches Beispiel unterscheiden wir ganze Zahlen (Natural) von Namen.
Der Ausdruck

/^[1-9][\d]*$/

erkennt eine (einzeilige) Zeichenkette als Zahl, wenn diese nicht mit 0 beginnt und mindestens aus einer Ziffer bestehen. Das erste / symbolisiert den Beginn der Regex. Das ^ stellt klar, dass wir uns am Anfang des Strings befinden. Dann kommt eine Zahl zwischen 1 und 9 (also keine 0). Anschließend dürfen durch [\d]* beliebig viele Ziffern folgen. Das Dollarzeichen am Ende macht klar, dass hier auch der String zu Ende sein muss.

Regex verwenden
Die Verwendung ist in Ruby an vielen Stellen möglich. Beispielhaft sollen hier nur wenige Möglichkeiten erklärt werden.

1. Match: Die Regexp-Klasse aus Ruby verfügt über eine Methode names "match". Diese erlaubt das einfache Überprüfen von Strings gegenüber Regex und gibt als Ergebnis true oder false zurück. Das folgende Beispiel überprüft eine Emailadresse auf Gültigkeit.

 
if /\A([\w\.\-\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i.match(emailadresse) then
  // Die Adresse ist korrekt
  weiter(emailadresse)
else
  // Die Adresse ist keine gültige Emailadresse
  emailadresseabfragen(emailadresse)
end
 

2. Aufteilen von Strings anhand von Mustern und speichern im Array

 
myarray = mystring.split(/trennregex/)
 

3. Ersetzten bzw. neu zusammenbauen

 
englischesdatum = "1984-11-05"
deutschesdatum = englischesdatum.sub(/(\w+)-(\w+)-(\w+)/, '\\3.\\2.\\1')
  # deutschesdatum == "05.11.1984"
 

Häufig gesuchte Expressions

  • Emailadresse validieren: /\A([\w\.\-\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
  • Homepage-URL validieren: ^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
  • Weitere Regex gerne gegen Vorschlag

Tools
Es existieren auch einige Tools im Internet, die das Checken von Strings gegen Expressions ermöglichen. Ein sehr hilfreiches finden Sie unter http://www.rubular.com/.

Bookmarken:
Hat Ihnen dieser Beitrag gefallen? Abonnieren Sie Codegods kostenlos!
  • del.icio.us
  • Google Bookmarks
  • Live
  • MisterWong
  • Technorati
  • StumbleUpon

Ähnliche Beiträge

Discussion

Ein Kommentar zu “Ruby und Regular Expressions (Regex)”

  1. [...] reguläre Ausdrücke zur effizienten Webentwicklung Ruby und Regular Expressions (Regex) Kommentare und Sonstiges mit PHP regex aus Quellcode löschen keine [...]

    Posted by RegEx: URL validieren | casibus | 28.08.10, 08:43

Kommentieren