Table of Contents

Regular Expressions

Das Schweizer Sackmesser der String-Analyse und Verarbeitung.

Ruby

Testen

str = "ananas and bananas"
if str =~ /a.a/
  puts "match't"
else
  puts "kein Match"
end

Extrahieren

scan liefert ein Array, das für jeden Match den enstprechenden String enthält (wenn keine Gruppen in der RegEx sind), oder für jeden Match ein Array mit allen Gruppenmatches.

str = "pineapple and bananas"
p str.scan(/a./)
p str.scan(/a(.)/)

Modifizieren

gsub ersetzt jeden Match mit dem angegeben String. Gruppenmatches können mit “\\1” etc. verwendet werden.

gsub ohne ! modifiziert den String nicht und liefert einen neuen String. gsub! (mit !) modifizert den String und liefert diesen als Resultat, ausser wenn kein Match vorliegt wird nil zurückgeliefert.

str = "pineapple and bananas"
p str.gsub(/a./, "vx")
p str.gsub(/a(.)/,"a->\\1<-")

Nach gsub kann zusätzlich ein Block folgen, der als Parameter den aktuellen match (als String) bekommt. Dieser wird durch das Resultat vom Block ersetzt. Beispiel:

str = "pineapple and bananas"
p str.gsub(/a./){|m|
  m[0]+m[1].upcase
}

Eliza

Ziel: Englische Sätze von der Ich- in die Du-Form umschreiben mittels Regular Expressions. Beispiele:

Dateien vom Donnerstag 17.11. (bräuchten noch ein bisschen Arbeit):

Nesa-Pilot

Das curl-Kommando muss jetzt noch ein bisschen angepasst werden, damit die Cookies gespeichert und wiederverwendet werden:

  1. Fügen Sie die Optionen -L -b nesa-cookies.txt -c nesa-cookies.txt hinzu. Damit werden Umleitungen automatisch verfolgt und Cookies von der Datei nesa-cookies.txt gelesen und neue wieder dort gespeichert.
  2. Löschen Sie die entsprechende Header Option (falls vorhanden), die ein altes Cookie sendet (-H etc..)

Im login-Formular ist ein Hash, der beim login mitgesendet werden muss (damit werden wohl auch Timeouts festgestellt). Diesen gilt es zu extrahieren:

startseite = `bash startseite.curl`.force_encoding("ISO-8859-1").encode("UTF-8")
puts startseite
 
# loginhash=startseite.scan(/..../)[0][0]  # FIXME
puts "-> HASH <-"
puts loginhash
logincurl = File.read("login.curl")
puts logincurl
# logincurl.gsub!(.....)  # FIXME
puts logincurl  # ACHTUNG: Enthält ihr Passwort (eventuell durch regex rausfiltern).
 
# Erste Seite nach login herunterladen
nesaseite = `#{loginseite}`

Zusammengefasst als Funktion (liefert erste Seite nach Login):

def getStartPage
  `rm nesa-cookies.txt`
  startseite = `bash startseite.curl`.force_encoding("ISO-8859-1").encode("UTF-8")
 
  # input type="hidden" value="a68ae62b0e4ffd730c315e37f50d0d5d" name="loginhash"
 
  loginhash=startseite.scan(/value="([0-9a-f]+)"\s+name="loginhash"/)[0][0]
 
  curllogin=File.read("login.curl")
  curllogin.gsub!(/loginhash=([^']+)'/,"loginhash=#{loginhash}'")
  `#{curllogin}`.force_encoding("ISO-8859-1").encode("UTF-8")
end

Nach erfolgreichem Login muss die Seite nach den gewünschten Links abgesucht werden:

Zeichnen Sie dann einen beliebigen Seitenzugriff auf und kopieren sie das curl-Kommando, modifizieren Sie es wie oben und ersetzen die URL durch z.B. 'mypage'. Dieser String wird dann durch die gewünschte URL ersetzt.