Reguläre Ausdrucke (PCRE)

  • 2,491 views
Uploaded on

Understanding Regular Expressions

Understanding Regular Expressions

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,491
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
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!