Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Regular Expressions - eine Einführung

1,880 views

Published on

Gastvortrag an der HTW Berlin am 8.Dezember 2011. Vorstellung von Regular Expressions.

Published in: Education, Technology
  • Be the first to comment

  • Be the first to like this

Regular Expressions - eine Einführung

  1. 1. Regular Expressions
  2. 2. Ziel based on http://xkcd.com/208/ by Randall Munroe - used under CC-BY-NC
  3. 3. Vorlesung und Übung zu Regular Expressions-  Irgendwas mit Strings: - grep –  match (erkennen) - vi, vim –  replace (ersetzen) - sed, awk-  Theoretische - perl Informatik: - c, c++ –  Regulärer Ausdruck - javascript –  equivalent zu - java, c# –  Endlicher Automat (Finite State Machine)
  4. 4. Anwendungsbeispiele$ grep POST log/development.log!Started POST "/modul/27-modul-netzwerke/book" for 127.0.0.1 at 2011-09-19 16:30:33 +0200Started POST "/event/ditact-2011" for 127.0.0.1 at 2011-09-19 16:32:33 +0200Started POST "/enroll/1659" for 127.0.0.1 at 2011-09-19 16:33:23 +0200Started POST "/admin/event/ditact-2011/updatebookings" for 127.0.0.1 at 2011-09-19 16:36:18 +0200Started POST "/admin/event/ditact-2011/updatebookings" for 127.0.0.1 at 2011-09-19 16:36:22 +0200Started POST "/course_evaluation/76" for 127.0.0.1 at 2011-09-20 17:07:36 +0200Started POST "/user/sign_in" for 127.0.0.1 at 2011-10-17 11:18:40 +0200
  5. 5. Anwendungsbeispiel PHP # PHP: Aus Wordpress Plugins!Code code code code code if (preg_match(/^(http)(s?)(:)///,$linky)){! if (preg_match ( "/en|sk|zh|us|uk/", $locale_code )){! # allgemein:! preg_match( "/regex/", "string in dem ich suche") !
  6. 6. Anwendungsbeispiel Javascript # Javascript!Code code code code code if (navigator.appVersion.match(/MSIE [0-6]./)) { ! if (formula.match(/^d+$/)) { // just a number! # Allgemein: regex hat eigene Syntax, ist ein! # eigener Datentyp! string.match(/regex/)! # für Fortgeschrittene: zur Laufzeit aus String bauen! r = new RegEx("/regex/")! r.execute(string)!
  7. 7. Anwendungsbeispiel Ruby # Ruby!Code code code code code if env[HTTP_USER_AGENT] =~ /chromeframe/! if line =~ /^committer: (.+)$/! next unless f =~ /^https?:///! # Allgemein: RegEx hat eigene Syntax! string =~ /regex/!
  8. 8. Anwendungsbeispiel C# # c# Aus http://support.microsoft.com/kb/308252!Code code code code code using System.Text.RegularExpressions;! Regex emailregex = new Regex("@");! String s = "johndoe@tempuri.org";! Match m = emailregex.Match(s);! if ( m.Success ) { ! Console.WriteLine("ja"); ! }!
  9. 9. Zeichen/hallo/! ja:! "hallo"! "aber hallo!"! "die hallobergrenze"! nein:! "halo"! "Hallo"! "<span>h</span>allo"!
  10. 10. Oder/en|sk|us|uk/! ja:! "en"! "sk"! "uk"! "ukulele"! nein:! "esuu"!
  11. 11. Gruppieren/(de|fr)_(DE|CH)/! ja:! "de_DE"! "fr_DE"! "de_CH"! "fr_CH"! nein:! "de_AT"! "it_CH"!
  12. 12. Verankern /^(en|sk|us|uk)$/! ja:! "en"! "sk"! "uk"! nein:! "ukulele"! "esuuk"!
  13. 13. Zeichen zur Auswahl: Klasse/^hall[oia]$/! ja:! "halli"! "hallo"! "halla"! nein:! "hall"! "halloi"! "hallö"!
  14. 14. Zeichen zur Auswahl: Klasse/^u[1-4]$/! ja:! "u1"! "u2"! "u3"! "u4"! nein:! "u5"! "ux"!
  15. 15. Zeichen zur Auswahl: Komplement der Klasse/^u[^1-4]$/! ja:! "u5"! "ux"! "u/"! nein:! "u1"! "u2"! "u3"! "u4"!
  16. 16. Klasse der Ziffern/^ud$/! ja:! "u5"! "u9"! "u0"! nein:! "ux"! "uz"! "udrei"!
  17. 17. Klasse der Wort-Zeichen/^w$/! die Zeichen, die man in Variablennamen verwenden darf:! a-z, A-Z, 0-9, _!
  18. 18. Irgendein Zeichen/^....$/! ja:! "1234"! "&$§_"! nein:! "1"! "12345"!
  19. 19. Beliebig viele davon: der Stern-Operator/^d*$/! ja:! ""! "1"! "123"! "1111"! nein:! "1a"!
  20. 20. Mindestens eins davon: der + Operator/^d+$/! ja:! "1"! "123"! "1111"! nein:! ""! "1a"!
  21. 21. eins oder keins: der ? Operator-  /^imis?$/ -  ja: -  "imi" -  "imis" -  nein: -  "imissss"
  22. 22. Anzahl festlegen/^d{4}$/! genau 4 Ziffern!/^d{3,6}$/! 3 bis 6 Ziffern!
  23. 23. Eins oder keins/^imid?$/! ja:! "imi"! "imi0"! "imi9"! nein:! "imi2011"!
  24. 24. mindestens eine ziffer/^imid+$/! ja:! "imi0"! "imi9"! "imi2011"! nein:! "imi"!
  25. 25. Operatoren sind "greedy"/(d*)/! "01234567"! ^^^^^^^^!/_(.*)_/! "_bla_ _bla_"! ^^^^^! ^^^^^^^! ^^^^^^^^^^^! den längsten möglichen String!!
  26. 26. Warnhinweis-  Es gibt Ding, die man nicht mehr mit Regular Expressions in den Griff bekommt-  Siehe Theoretische Informatik: –  reguläre Ausdrück = Chomsky Hierarchie Typ 3 –  kontextfreie Grammatik = Chomsky Hierarchie Typ 2-  Alle Computersprachen, XML, HTML sind Typ 2-  Man braucht also einen richtigen Parser dafür!
  27. 27. /(bb|[^b]{2})/bb[^b][^b]{2}bb|[^b]{2}

×