Your SlideShare is downloading. ×
0
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,553

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

    ×