efinf:blc2016:regex

This is an old revision of the document!


Das Schweizer Sackmesser der String-Analyse und Verarbeitung.

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<-")
  • Installieren Sie den Chrome (sudo apt-get install chromium-browser)
  • Drücken Sie F12, um die Debug-Suite zu starten und aktivieren Sie den Tab “Network”
  • Gehen Sie auf die Startseite von Nesa: https://ksbg.nesa-sg.ch/loginto.php?mode=0&lang= (oder laden Sie die Seite neu)
  • Rechts-Klick auf ersten Netzwerkzugriff: “copy as cURL” * Die curl-Kommandozeile in eine Datei speichern (z.B. startseite.curl)

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
  • Loggen Sie sich auf Nesa ein.
  • Rechts-Klick auf ersten Netzwerkzugriff: “copy as cURL” * Die curl-Kommandozeile in eine Datei speichern (z.B. login.curl). *ACHTUNG* diese Datei enthält ihr Passwort im Klartext! Am besten ändern Sie ihr Passwort danach (oder auch davor).
  • Modifizieren Sie das curl-Kommando wie oben.
  • In diesem Kommando muss der loginhash angepasst werden
logincurl = File.read("login.curl")
puts logincurl
# loginseite.gsub!(.....)  # FIXME
puts loginseite
 
# Erste Seite nach login herunterladen
nesaseite = `#{loginseite}`

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

  • Im “F12-Modus”, klicken Sie oben link auf das Pfeilsymbol (inspect elements) und klicken Sie auf einen interessanten Link. Der entsprechende Code wird angezeigt.
  • Was zwischen nach href=“” zwischen den Anführungszeichen steht interessiert uns.

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.

  • efinf/blc2016/regex.1479138218.txt.gz
  • Last modified: 2016/11/14 16:43
  • by Ivo Blöchliger