2. Ziel
based on http://xkcd.com/208/ by Randall Munroe - used under CC-BY-NC
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. 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 +0200
Started POST "/event/ditact-2011" for 127.0.0.1 at 2011-09-19 16:32:33 +0200
Started POST "/enroll/1659" for 127.0.0.1 at 2011-09-19 16:33:23 +0200
Started POST "/admin/event/ditact-2011/updatebookings" for 127.0.0.1 at 2011-09-19 16:36:18 +0200
Started POST "/admin/event/ditact-2011/updatebookings" for 127.0.0.1 at 2011-09-19 16:36:22 +0200
Started POST "/course_evaluation/76" for 127.0.0.1 at 2011-09-20 17:07:36 +0200
Started POST "/user/sign_in" for 127.0.0.1 at 2011-10-17 11:18:40 +0200
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. 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. 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. 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"); !
}!
25. Operatoren sind "greedy"
/(d*)/! "01234567"!
^^^^^^^^!
/_(.*)_/! "_bla_ _bla_"!
^^^^^!
^^^^^^^!
^^^^^^^^^^^!
den längsten möglichen
String!!
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!