{{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.