Your SlideShare is downloading. ×
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Reguläre Ausdrucke (PCRE)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Reguläre Ausdrucke (PCRE)

2,540

Published on

Understanding Regular Expressions

Understanding Regular Expressions

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,540
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Chomsky-Hierarchie: - Begriff aus der Theoretischen Informatik - 4 Grammatiktypen (0 bis 3) - Typ einer Grammatik beschreibt die Mindestanforderung um eine eine bestimme formale Sprache zu erzeugen * 3.1 Typ-0-Grammatik (allgemeine Chomsky-Grammatik oder Phrasenstrukturgrammatik) * 3.2 Typ-1-Grammatik (kontextsensitive bzw. monotone Grammatik) * 3.3 Typ-2-Grammatik (kontextfreie Grammatik) * 3.4 Typ-3-Grammatik (rechtslineare bzw. linkslineare Grammatik) Endlicher Automat: - Verhaltensmodell - bestehend aus Zuständen, Zustandsübergängen und Aktionen - endlich wenn die Menge der Zustände die er einnehmen kann endlich ist - 4 Aktionen (Eingangsaktion, Ausgangsaktion, Eingabeaktion, Übergabeaktion) - Visualisierung mittels Zustandsübergangsdiagramm
  • Transcript

    • 1. Reguläre Ausdrücke & die PCRE- Bibliothek Dominik Siebel PHP Usergroup D / DU / KR Usergrouptreffen am 24.02.2010
    • 2. Über mich Dominik Siebel (25)
        • Fachinformatiker für Anwendungsentwicklung
        • 3. PHP seit 2004
        • 4. Webdeveloper TWT Interactive GmbH seit Juni 2008
    • 5. Agenda
      • Definition & Theorie
      • 6. Einstieg
        • Struktur und Funktionsweise
        • 7. Metazeichen
        • 8. Zeichenklassen
        • 9. Quantoren
        • 10. Einfache Beispiele
      • Fortgeschritten
      • Zusatz
        • Regex in PHP
        • Dos und Don'ts (Rekursionen)
    • 14. Definition & Theorie In der Informatik ist ein regulärer Ausdruck (RegExp oder Regex) eine Zeichenkette, die der Beschreibung von Mengen und Untermengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.
    • 15. Definition & Theorie
      • Beschreiben eine Familie von formalen Sprachen
      • 16. Formale Grammatik vom Typ3 der Chomsky-Hierarchie
      • 17. Zu jedem Regex existiert ein endlicher Automat
      • 18. 3 Operationen
        • Alternative (Boolean „or“)
        • 19. Verkettung (Grouping)
        • 20. Wiederholung (Quantification)
    • 21. Funktionsweise
      • Zeichenweise Verarbeitung
      • 22. immer von links nach rechts
      • 23. Alle Metazeichen / Zeichenklassen werden als einfaches Zeichen gewertet
      • 24. „Dumm und gierig“
      • 25. Bestehen aus Zeichen des zugrunde liegenden Alphabets und definierten Metazeichen *
    • 26. Struktur Aufbau eines Reges
    • 27. Struktur Aufbau eines Reges
        / [a-z]+ /im
    • 28. Struktur Aufbau eines Reges
        / [a-z]+ / im
        • Delimiter
          • Beliebiges Zeichen
          • 29. Muss im Ausdruck escaped werden
          • 30. '(' oder ')' in PCRE: ( [a-z]+ ) im
    • 31. Struktur Aufbau eines Reges
        / [a-z]+ /im
        • Delimiter
          • Beliebiges Zeichen
          • 32. Muss im Ausdruck escaped werden
          • 33. '(' oder ')' in PCRE: ( [a-z]+ )im
        • Ausdruck
    • 34. Struktur Aufbau eines Reges
        / [a-z]+ / im
        • Delimiter
          • Beliebiges Zeichen
          • 35. Muss im Ausdruck escaped werden
          • 36. '(' oder ')' in PCRE: ( [a-z]+ )im
        • Ausdruck
        • 37. Modifier
    • 38. Metazeichen
      • . beliebiges Zeichen
      • 39. ^ Anfang
      • 40. $ Ende
      • 41. | Alternative
      • 42. ( … ) Subpattern
      • 43. [ … ] Zeichenklassen
      • 44. * + ? { n,m } Quantoren
      • 45. Aufheben der Meta- Eigenschaften
        • . ^ $ ...
    • 46. Zeichenklassen Abgrenzung
      • Logische Gruppierung von Zeichen
      • 47. [0-9] Zeichenauswahl
        • repräsentiert ein Zeichen der Auswahl
        • 48. Kontextsensitiv
      • d Zeichenklasse
        • Können durch Zeichenauswahl abgebildet werden
        • 49. Negierung durch Großschreibung: D
    • 50. Zeichenklassen Beispiele
      • Zeichenauswahl
        • [abc] Buchstabe a,b oder c
        • 51. [a-zA-Z0-9] alphanumerisches Zeichen
        • 52. [^a-zA-Z0-9] alles außer einem alphanumerischen Zeichen
      • Vordefinierte Zeichenklassen
        • d Dezimalzahl
        • 53. w Wortzeichen
        • 54. s Whitespace (Leerzeichen UND Steuerzeichen , , )
        • 55. … und mehr: h, H, v, V
    • 56. Quantoren
      • Vervielfachen des vorangegangenen Ausdrucks
      • 57. Können auf jeden beliebigen Ausdruck angewendet werden:
        • Zeichen Zeichenklassen
        • 58. Referenzen Subpattern
      / [a-z] + /
    • 59. Quantoren Typen
      • ? vor. Ausdruck optional {0,1}
      • 60. + vor. Ausdruck mindestens einmal {1,}
      • 61. * vor. Ausdruck beliebig oft {0,}
      • 62. { min , max }
        • { n } vor. Ausdruck exakt n -mal
        • 63. {, max } vor. Ausdruck maximal max -mal
        • 64. { min ,} vor. Ausdruck mindestens min -mal
    • 65. Einfache Beispiele
    • 66. Einfache Beispiele / .* /
    • 67. Einfache Beispiele
      • Jedes beliebige Zeichen beliebig oft (auch kein -mal)
      / . * /
    • 68. Einfache Beispiele
      • Jedes beliebige Zeichen beliebig oft (auch kein -mal)
      / . * /
    • 69. Einfache Beispiele / [a-z]+ /
    • 70. Einfache Beispiele
      • Kleinbuchstaben von a bis z
      / [a-z] + /
    • 71. Einfache Beispiele / [a-z] + /
      • Kleinbuchstaben von a bis z
      • 72. Ein - bis n -mal
    • 73. Einfache Beispiele / [a-z]+ / i
    • 74. Einfache Beispiele
      • Alle Buchstaben von a bis z
      / [a-z] + / i
    • 75. Einfache Beispiele
      • Alle Buchstaben von a bis z
      • 76. ein - bis n -mal
      / [a-z] + / i
    • 77. Einfache Beispiele / foo(s*,s*foo)* /
    • 78. Einfache Beispiele / foo (s*,s*foo)* /
      • Zeichenkette foo
    • 79. Einfache Beispiele
      • Zeichenkette foo
      • 80. 0 bis n komma separierte Zeichenketten foo
      / foo(s*,s*foo) * /
    • 81. Einfache Beispiele
      • Zeichenkette foo
      • 82. 0 bis n komma separierte Zeichenketten foo
      / foo(s* , s* foo )* /
    • 83. Einfache Beispiele
      • Zeichenkette foo
      • 84. 0 bis n komma separierte Zeichenketten foo
        • Inklusive umgebender Whitespaces
      / foo( s* , s* foo)* /
    • 85. Greediness
      • Q: Auf wie viele Zeichen matcht der Reguläre Ausdruck für die Zeichenkette foobar
      • A: Abhängig von der „ Gierigkeit “ ( Greediness ) der Regex- Engine
        • Greedy (default)
        • 87. Ungreedy
      .*
    • 88. Greediness Umschalten
      • Global über Modifier U
        • / .* / U
        • 89. Gilt für den gesamten Regulären Ausdruck
      • Lokal über Quantor gefolgt von ?
        • / .* ? /
        • 90. / [0-9]+ ? /
        • 91. Gilt für den jeweils vorangestellten Teilausdruck
      • / .* ? / U Kombination möglich
    • 92. Greediness
      • Input: foobar
      • 93. Match: alle Zeichen
      / .* /
    • 94. Greediness
      • Input: foobar
      • 95. Match: kein Zeichen
      / .* / U / .* ? /
    • 96. Subpattern
    • 97. Subpattern Verwendung
      • Informationsextraktion
        • Nummeriert nach öffnenden Klammern:
      / ( foo ( bar ))( baz ) * /
    • 100. Subpattern Verwendung
      • Vervielfachung von Teilausdrücken durch Quantoren
      / ( foobar )* /
    • 101. Subpattern Verwendung
      • Rückwärtsreferenzierung
        • Wiederverwendung von Subpattern
        • 102. Nummeriert nach öffnender Klammer
      / ( foo|bar ) something (1) * /
    • 103. Subpattern Gruppierung
      • Gruppierung ohne die Erzeugung eines Subpattern durch ?:
        • Result:
      / (foo|bar) (?: baz ) ?(1)* /
    • 105. Subpattern Benennung
      • Eigenart der PCRE
      • 106. Mit ?P<key> lassen sich Subpattern zusätzlich assoziativ ablegen:
      Input: Dominik Siebel / ( ?P<firstname> [A-Za-z]+) ( ?P<lastname> [A-Za-z]+) /
    • 111. Assertions Definition
      • Annahme / Behauptung
      • 112. Seit Perl 5
      • 113. Ermöglichen kontextsensitive Bedingungen
        • Positive Assertions
        • 114. Negative Assertions
        • 115. Forward Assertions
        • 116. Backward Assertions
    • 117. Assertions positive forward
      • Positive look-ahead assertion
      • 118. Definiert durch ?=
      • 119. „ Finde whitespace wenn gefolgt von EUR “
      / s( ?= EUR) /
    • 120. Assertions negative forward
      • Negative look-ahead assertion
      • 121. Definiert durch ?!
      • 122. „ Finde Sport wenn nicht gefolgt von verein “
      / Sport( ?! verein) /
    • 123. Assertions positive backward
      • Positive look-behind assertion
      • 124. Definiert durch ?<=
      • 125. „ Finde Zahlen vorangestelltem EUR “
      / ( ?<= EUR) d+ /
    • 126. Assertions negative backward
      • Negative look-behind assertion
      • 127. Definiert durch ?<!
      • 128. „ Finde verein wenn Sport nicht vorausgegangen ist“
      / ( ?<! Sport)verein /
    • 129. Bedingte Ausdrücke
      • „ Wenn öffnendes a-Tag vorhanden muss das schließende auch gematcht werden “
      • 130. Vergleichbar mit dem ternären Operator in PHP:
        • echo ( empty ( $aList ) ? 'Liste leer' : '' );
      • Definiert durch ?( if ) then | else
      • 131. Nachfolgender Ausdruck wenn Bedingung erfüllt
      / (<as+[^>]+s*)?<imgs+[^>]+>( ?(1) s*</a>) /
    • 132. Bedingte Ausdrücke
      • <a>
      / (<as+[^>]+s*)? <imgs+[^>]+>(?(1)s*</a>) /
    • 133. Bedingte Ausdrücke / (<as+[^>]+s*)? <imgs+[^>]+> (?(1)s*</a>) /
    • 135. Bedingte Ausdrücke
      • <a>
      • 136. <img />
      • 137. Bedingung: <a> muss vorhanden sein
        • „ Wenn <a> - Tag gefunden, dann </a> suchen“
      / (<as+[^>]+s*)?<imgs+[^>]+>( ?(1) s*</a>) /
    • 138. Bedingte Ausdrücke
      • <a>
      • 139. <img />
      • 140. Bedingung: <a> muss vorhanden sein
        • „ Wenn <a> - Tag gefunden, dann </a> suchen“
      / (<as+[^>]+s*)?<imgs+[^>]+>(?(1) s*</a> ) /
    • 141. Reguläre Ausdrücke in PHP preg_*
      • preg_match( RegExp , Subject , [ matches ])
        • Subject einfach gegen RegExp prüfen
        • 142. Optional: matches
        • 143. Liefert 0 oder 1 (Anzahl der Treffer)
      • preg_replace( RegExp , Replacement , Subject )
        • Alle Treffer von RegExp in Subject durch Replacement ersetzen
        • 144. Optional: Limit, Anzahl der Ersetzungen
        • 145. Liefert Subject nach Ersetzungen
    • 146. Reguläre Ausdrücke in PHP preg_*
      • preg_split( RegExp , Subject )
        • Subject anhand von RegExp aufteilen
        • 147. Optional: Limit, Flags *
        • 148. Liefert array der Teile
    • 149. Reguläre Ausdrücke in PHP preg_*
      • preg_split( RegExp , Subject )
        • Subject anhand von RegExp aufteilen
        • 150. Optional: Limit, Flags *
        • 151. Liefert array der Teile
      • Flags
          • PREG_SPLIT_NO_EMPTY Leere Elemente werden ignoriert
          • 152. ...
    • 153. Reguläre Ausdrücke in PHP preg_*
      • preg_split( RegExp , Subject )
        • Subject anhand von RegExp aufteilen
        • 154. Optional: Limit, Flags *
        • 155. Liefert array der Teile
      • preg_quote( Subject , [ Delimiter ])
        • Metazeichen in Subject escapen
        • 156. Optional: Delimiter
        • 157. Liefert Subject breinigt
    • 158. Reguläre Ausdrücke in PHP preg_*
      • preg_match_all( RegExp , Subject , [ Matches ], [ Flags ])
        • Subject einfach gegen RegExp prüfen
        • 159. Optional: Matches, Flags * , Offset
        • 160. Liefert 0 oder Anzahl der Treffer
    • 161. Reguläre Ausdrücke in PHP preg_*
      • preg_match_all( RegExp , Subject , [ Matches ], [ Flags ])
        • Subject einfach gegen RegExp prüfen
        • 162. Optional: M atches, Flags * , Offset *
        • 163. Liefert 0 oder Anzahl der Treffer
        • 164. Flags
          • PREG_PATTERN_ORDER Sortierung nach Subpattern (default)
          • 165. PREG_SET_ORDER Sortierung nach Gesamtausdruck (vgl. preg_match)
          • 166. ...
    • 167. Reguläre Ausdrücke in PHP preg_*
      • preg_match_all( RegExp , Subject , [ Matches ], [ Flags ])
        • Subject einfach gegen RegExp prüfen
        • 168. Optional: M atches, Flags * , Offset *
        • 169. Liefert 0 oder Anzahl der Treffer
      • Manual: http://php.net/manual/en/ref.pcre.php
    • 170. Reguläre Ausdrücke in PHP Escaping
      • Bestimmte Zeichen müssen escaped werden
      • 171. Double quotes “
      • Single quotes '
        • Backslash
        • 174. ' single quote
    • 175. Reguläre Ausdrücke in PHP Escaping
      • Alle Metazeichen ! ? . + * () [] {}
      • 176. Delimiter (Außer bei Verwendung von () )
      • 177. Verwendung von Single Quotes ratsam
      / [ [ ] ]* /
        Auch wenn nicht nötig: Backslash escapen
    • 178. Dos und Don'ts
      • Do : Validierung von begrenztem input
      • 179. Do : Tokenizing von Zeichenketten
      • 180. Dont : Parsen mit Regulären Ausdrücken
        • Schwer wartbar
        • 181. Fehlersuche fast unmöglich
    • 182. Quellen
      • Reguläre Ausdrücke – kurz & gut, O'Reilly Verlag, ISBN: 3897215357
      • 183. Wikipedia http://de.wikipedia.org/wiki/Regul%C3%A4re_Ausdr%C3%BCcke
    • 184. Empfehlungen
      • Reguläre Ausdrücke – kurz & gut, O'Reilly Verlag, ISBN: 3897215357
      • 185. Reguläre Ausdrücke, O'Reilly Verlag, ISBN: 3897217201
    • 186. Reguläre Ausdrücke & die PCRE- Bibliothek Vielen Dank für Eure Aufmerksamkeit!

    ×