Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| efinf:blc2016:regex [2016/11/14 19:37] – [Ruby] Ivo Blöchliger | efinf:blc2016:regex [2016/11/29 13:24] (current) – Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{backlinks> | ||
| + | ===== Regular Expressions ===== | ||
| + | Das Schweizer Sackmesser der String-Analyse und Verarbeitung. | ||
| + | |||
| + | |||
| + | ==== Ruby ==== | ||
| + | === Testen === | ||
| + | <code ruby> | ||
| + | str = " | ||
| + | if str =~ /a.a/ | ||
| + | puts " | ||
| + | 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. | ||
| + | <code ruby> | ||
| + | str = " | ||
| + | p str.scan(/ | ||
| + | p str.scan(/ | ||
| + | </ | ||
| + | |||
| + | === Modifizieren === | ||
| + | gsub ersetzt jeden Match mit dem angegeben String. Gruppenmatches können mit " | ||
| + | |||
| + | 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. | ||
| + | |||
| + | <code ruby> | ||
| + | str = " | ||
| + | p str.gsub(/ | ||
| + | p str.gsub(/ | ||
| + | </ | ||
| + | |||
| + | 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: | ||
| + | <code ruby> | ||
| + | str = " | ||
| + | p str.gsub(/ | ||
| + | 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' | ||
| + | * I told you so -> Can you elaborate on why **you** told **me** so? | ||
| + | |||
| + | Dateien vom Donnerstag 17.11. (bräuchten noch ein bisschen Arbeit): | ||
| + | * {{ : | ||
| + | * {{ : | ||
| + | |||
| + | ==== 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 " | ||
| + | * Gehen Sie auf die Startseite von Nesa: https:// | ||
| + | * Rechts-Klick auf ersten Netzwerkzugriff (mit Code 200): "copy as cURL" | ||
| + | |||
| + | Das curl-Kommando muss jetzt noch ein bisschen angepasst werden, damit die Cookies gespeichert und wiederverwendet werden: | ||
| + | - Fügen Sie die Optionen '' | ||
| + | - 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: | ||
| + | |||
| + | <code ruby> | ||
| + | startseite = `bash startseite.curl`.force_encoding(" | ||
| + | puts startseite | ||
| + | |||
| + | # loginhash=startseite.scan(/ | ||
| + | puts "-> HASH <-" | ||
| + | puts loginhash | ||
| + | </ | ||
| + | |||
| + | * Loggen Sie sich auf Nesa ein. | ||
| + | * Rechts-Klick auf ersten Netzwerkzugriff: | ||
| + | * Modifizieren Sie das curl-Kommando wie oben. | ||
| + | * In diesem Kommando muss der loginhash angepasst werden | ||
| + | |||
| + | |||
| + | <code ruby> | ||
| + | logincurl = File.read(" | ||
| + | puts logincurl | ||
| + | # logincurl.gsub!(.....) | ||
| + | puts logincurl | ||
| + | |||
| + | # Erste Seite nach login herunterladen | ||
| + | nesaseite = `# | ||
| + | </ | ||
| + | |||
| + | Zusammengefasst als Funktion (liefert erste Seite nach Login): | ||
| + | <code ruby> | ||
| + | def getStartPage | ||
| + | `rm nesa-cookies.txt` | ||
| + | startseite = `bash startseite.curl`.force_encoding(" | ||
| + | | ||
| + | # input type=" | ||
| + | | ||
| + | loginhash=startseite.scan(/ | ||
| + | | ||
| + | curllogin=File.read(" | ||
| + | curllogin.gsub!(/ | ||
| + | `# | ||
| + | end | ||
| + | |||
| + | </ | ||
| + | |||
| + | Nach erfolgreichem Login muss die Seite nach den gewünschten Links abgesucht werden: | ||
| + | * Im " | ||
| + | * Was zwischen nach href="" | ||
| + | |||
| + | |||
| + | Zeichnen Sie dann einen beliebigen Seitenzugriff auf und kopieren sie das curl-Kommando, | ||