Top Banner
Regular Expressions
27

Regular Expressions - eine Einführung

Dec 05, 2014

Download

Education

Gastvortrag an der HTW Berlin am 8.Dezember 2011. Vorstellung von Regular Expressions.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Regular Expressions - eine Einführung

Regular Expressions

Page 2: Regular Expressions - eine Einführung

Ziel

based on http://xkcd.com/208/ by Randall Munroe - used under CC-BY-NC

Page 3: Regular Expressions - eine Einführung

Vorlesung und Übung zu Regular Expressions

-  Irgendwas mit Strings: –  match (erkennen) –  replace (ersetzen)

-  Theoretische Informatik: –  Regulärer Ausdruck –  equivalent zu –  Endlicher Automat

(Finite State Machine)

- grep - vi, vim - sed, awk - perl - c, c++ - javascript - java, c#

Page 4: Regular Expressions - eine Einführung

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

Page 5: Regular Expressions - eine Einführung

Cod

e co

de c

ode

code

cod

e

Anwendungsbeispiel PHP

# PHP: Aus Wordpress Plugins!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") !

Page 6: Regular Expressions - eine Einführung

Cod

e co

de c

ode

code

cod

e

Anwendungsbeispiel Javascript

# Javascript!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)!

Page 7: Regular Expressions - eine Einführung

Cod

e co

de c

ode

code

cod

e

Anwendungsbeispiel Ruby

# Ruby!if env['HTTP_USER_AGENT'] =~ /chromeframe/!

if line =~ /^committer: (.+)$/!

next unless f =~ /^https?:\/\//!

# Allgemein: RegEx hat eigene Syntax!

string =~ /regex/!

Page 8: Regular Expressions - eine Einführung

Cod

e co

de c

ode

code

cod

e

Anwendungsbeispiel C#

# c# Aus http://support.microsoft.com/kb/308252!using System.Text.RegularExpressions;!Regex emailregex = new Regex("@");!String s = "[email protected]";!

Match m = emailregex.Match(s);!

if ( m.Success ) { !Console.WriteLine("ja"); !}!

Page 9: Regular Expressions - eine Einführung

Zeichen

/hallo/! ja:!"hallo"!"aber hallo!"!"die hallobergrenze"!

nein:!"halo"!"Hallo"!"<span>h</span>allo"!

Page 10: Regular Expressions - eine Einführung

Oder

/en|sk|us|uk/! ja:!"en"!"sk"!"uk"!"ukulele"!

nein:!"esuu"!

Page 11: Regular Expressions - eine Einführung

Gruppieren

/(de|fr)_(DE|CH)/! ja:!"de_DE"!"fr_DE"!"de_CH"!"fr_CH"!

nein:!"de_AT"!"it_CH"!

Page 12: Regular Expressions - eine Einführung

Verankern

/^(en|sk|us|uk)$/! ja:!"en"!"sk"!"uk"!

nein:!"ukulele"!"esuuk"!

Page 13: Regular Expressions - eine Einführung

Zeichen zur Auswahl: Klasse

/^hall[oia]$/! ja:!"halli"!"hallo"!"halla"!

nein:!"hall"!"halloi"!"hallö"!

Page 14: Regular Expressions - eine Einführung

Zeichen zur Auswahl: Klasse

/^u[1-4]$/! ja:!"u1"!"u2"!"u3"!"u4"!

nein:!"u5"!"ux"!

Page 15: Regular Expressions - eine Einführung

Zeichen zur Auswahl: Komplement der Klasse

/^u[^1-4]$/! ja:!"u5"!"ux"!"u/"!

nein:!"u1"!"u2"!"u3"!"u4"!

Page 16: Regular Expressions - eine Einführung

Klasse der Ziffern

/^u\d$/! ja:!"u5"!"u9"!"u0"!

nein:!"ux"!"uz"!"udrei"!

Page 17: Regular Expressions - eine Einführung

Klasse der Wort-Zeichen

/^\w$/! die Zeichen, die man in Variablennamen verwenden darf:!

a-z, A-Z, 0-9, _!

Page 18: Regular Expressions - eine Einführung

Irgendein Zeichen

/^....$/! ja:!"1234"!"&$§_"!

nein:!"1"!"12345"!

Page 19: Regular Expressions - eine Einführung

Beliebig viele davon: der Stern-Operator

/^\d*$/! ja:!""!"1"!"123"!"1111"!

nein:!"1a"!

Page 20: Regular Expressions - eine Einführung

Mindestens eins davon: der + Operator

/^\d+$/! ja:!"1"!"123"!"1111"!

nein:!""!"1a"!

Page 21: Regular Expressions - eine Einführung

eins oder keins: der ? Operator

-  /^imis?$/ -  ja: -  "imi" -  "imis"

-  nein: -  "imissss"

Page 22: Regular Expressions - eine Einführung

Anzahl festlegen

/^\d{4}$/!

/^\d{3,6}$/!

genau 4 Ziffern!

3 bis 6 Ziffern!

Page 23: Regular Expressions - eine Einführung

Eins oder keins

/^imi\d?$/! ja:!"imi"!"imi0"!"imi9"!

nein:!"imi2011"!

Page 24: Regular Expressions - eine Einführung

mindestens eine ziffer

/^imi\d+$/! ja:!"imi0"!"imi9"!"imi2011"!

nein:!"imi"!

Page 25: Regular Expressions - eine Einführung

Operatoren sind "greedy"

/(\d*)/!

/_(.*)_/!

"01234567"! ^^^^^^^^!

"_bla_ _bla_"! ^^^^^! ^^^^^^^! ^^^^^^^^^^^!

den längsten möglichen String!!

Page 26: Regular Expressions - eine Einführung

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!

Page 27: Regular Expressions - eine Einführung

/(bb|[^b]{2})/

bb [^b] [^b]{2} bb|[^b]{2}