{{backlinks>.}}
===== 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:
* I think my toe hurts -> Why do **you** think that **your** toe hurts?
* I'm so sad -> Does is happen often that **you're** so sad?
* I told you so -> Can you elaborate on why **you** told **me** so?
Dateien vom Donnerstag 17.11. (bräuchten noch ein bisschen Arbeit):
* {{ :efinf:blc2016:regex:eliza.rb |}}
* {{ :efinf:blc2016:regex:eliza-server.rb |}}
==== Nesa-Pilot ====
* Installieren Sie den Chrome (sudo apt-get install chromium-browser)
* In Chrome, 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 (mit Code 200): "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:
- 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.
- 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
# 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:
* 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.