Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wyrażenia regularne

Wyrażenia regularne

2013-05-20 PHPers.pl

Tytus

May 20, 2013
Tweet

Other Decks in Programming

Transcript

  1. Wyrażenia Regularne
    20-05-2013
    Tytus Ciunelis
    @tciunelis

    View full-size slide

  2. Wyrażenia Regularne z

    View full-size slide

  3. Wyrażenia Regularne z
    Kapitanem Kirkiem

    View full-size slide

  4. PCRE
    PCRE = Perl Compatible Regular Expressions

    View full-size slide

  5. PCRE
    PCRE = Perl Compatible Regular Expressions
    Philip Hazel
    University Computing Service
    Cambridge CB2 3QH, England.

    View full-size slide

  6. PCRE
    PCRE = Perl Compatible Regular Expressions

    http://www.pcre.org/pcre.txt

    View full-size slide

  7. Oznaczenia
    RegExp
    Subject
    Match

    View full-size slide

  8. RegExp
    /foobar/i

    View full-size slide

  9. RegExp - pattern
    /foobar/i

    View full-size slide

  10. RegExp - pattern
    /foobar/i

    Pattern - sekwencja symboli i słów

    Opis szukanego łańcucha

    View full-size slide

  11. RegExp - modifier
    /foobar/i

    View full-size slide

  12. RegExp - modifier
    /foobar/i

    Opcjonalnie

    View full-size slide

  13. RegExp - delimiter
    /foobar/i

    View full-size slide

  14. RegExp - delimiter
    /foobar/i

    oddziela wzorzec

    rozdziela wzorzec od modyfikatorów

    View full-size slide

  15. RegExp - delimiter
    #foobar#i

    View full-size slide

  16. RegExp - delimiter
    #foobar#i

    View full-size slide

  17. RegExp - delimiter
    [foobar]i

    View full-size slide

  18. RegExp - delimiter
    {foobar}i

    View full-size slide

  19. RegExp - example
    /DESTRUCTION/
    Peace or...UTTER DESTRUCTION...it's up to you.
    -- Kirk in 'A Taste Of Armageddon'

    View full-size slide

  20. RegExp - example
    /DESTRUCTION/
    Peace or...UTTER DESTRUCTION...it's up to you.

    Wzorzec musi wystąpić przynajmniej raz

    Położenie nie jest istotne
    -- Kirk in 'A Taste Of Armageddon'

    View full-size slide

  21. Metacharacters

    View full-size slide

  22. Metacharacters
    /[Cap]tin \s* Ki+r./

    Część znaków wzorca ma specjalne znaczenie

    View full-size slide

  23. /Captin .irk/
    Metacharacters - Dot

    View full-size slide

  24. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku

    View full-size slide

  25. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku
    ○ Oprócz znaku nowej lini

    View full-size slide

  26. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku
    ○ Oprócz znaku nowej lini
    Captin Kirk ✓

    View full-size slide

  27. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku
    ○ Oprócz znaku nowej lini
    Captin Dirk ✓

    View full-size slide

  28. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku
    ○ Oprócz znaku nowej lini
    Captin Śirk ✓

    View full-size slide

  29. /Captin .irk/
    Metacharacters - Dot
    ○ Kropka pasuje do dowolnego znaku
    ○ Oprócz znaku nowej lini
    Captin _irk ✓

    View full-size slide

  30. /Captin.Kirk/s
    Metacharacters - Dot

    View full-size slide

  31. /Captin.Kirk/s
    Metacharacters - Dot
    ○ Modyfikator s włącza tryb single line (dotall)

    View full-size slide

  32. /Captin.Kirk/s
    Metacharacters - Dot
    ○ Modyfikator s włącza tryb single line (dotall)
    Captin Kirk ✓

    View full-size slide

  33. /Captin.Kirk/s
    Metacharacters - Dot
    ○ Modyfikator s włącza tryb single line (dotall)
    Captin:Kirk ✓

    View full-size slide

  34. /Captin.Kirk/s
    Metacharacters - Dot
    ○ Modyfikator s włącza tryb single line (dotall)
    Captin↵
    Kirk ✓

    View full-size slide

  35. /Captin.Kirk/s
    Metacharacters - Dot
    ○ Modyfikator s włącza tryb single line (dotall)
    ○ http://nikic.github.io/2011/12/10/PCRE-and-newlines.html
    Captin↵
    Kirk ✓

    View full-size slide

  36. \$
    Metacharacters - Escape
    ○ Za pomocą \ można pozbawić znak specjalnego znaczenia

    View full-size slide

  37. \$
    Metacharacters - Escape
    . [] () ^ $ * + ? {} | \
    ○ Za pomocą \ można pozbawić znak specjalnego znaczenia

    View full-size slide

  38. Price is \Q$9.99\E
    Metacharacters - Escape
    Price is $9.99

    View full-size slide

  39. Price is \Q$9.99\E
    Metacharacters - Escape
    Price is $9.99
    ○ Metaznaki wewnątrz \Q i \E stracą swoje specjalne
    znaczenie

    View full-size slide

  40. Character Classes

    View full-size slide

  41. /[abcdef]/
    Character Classes

    View full-size slide

  42. /[abcdef]/
    Character Classes
    ○ Brak separatorów między znakami

    View full-size slide

  43. /[abcdef]/
    Character Classes
    ○ Brak separatorów między znakami
    ○ Ograniczone nawiasami kawadratowymi

    View full-size slide

  44. /[abcdef]/
    Character Classes
    ○ Brak separatorów między znakami
    ○ Ograniczone nawiasami kawadratowymi
    ○ Traktowane jako jeden znak

    View full-size slide

  45. /[a-f]/
    Character Classes
    ○ Można definiować zakres

    View full-size slide

  46. /[a-cd-f0-9]/
    Character Classes
    ○ Można definiować zakres
    ○ Jedna klasa może zawierać wiele zakresów

    View full-size slide

  47. /[abc.]/
    Character Classes
    ○ Znaki specjalne (metacharacters) tracą swoje specjalne
    znaczenie wewnątrz klasy

    View full-size slide

  48. /[af-]/
    Character Classes
    ○ Myślnik traci specjalne znaczenie

    View full-size slide

  49. /[^abc]/
    Character Classes
    ○ Znaki w klasie mogą być zanegowane. Dopełnienie zbioru.

    View full-size slide

  50. /[^abc]/
    Character Classes
    ○ Znaki w klasie mogą być zanegowane
    ○ Oznacza każdy znak, który nie znajduje się w klasie razem
    z nowymi liniami

    View full-size slide

  51. /[ab^c]/
    Character Classes
    ○ W innym miejscu traci specjalne znaczenie

    View full-size slide

  52. Character Classes - skróty
    \w słowo [A-Za-z0-9_]
    \W wszystko oprócz słów [^A-Za-z0-9_]
    \d cyfra [0-9]
    \D wszystko oprócz cyfr [^0-9]
    \s biały znak [ \n\r\t\f]
    \S wszystko oprócz białych
    znaków
    [^ \n\r\t\f]

    View full-size slide

  53. Character Classes - skróty
    \w słowo [A-Za-z0-9_]
    \W wszystko oprócz słów [^A-Za-z0-9_]
    \d cyfra [0-9]
    \D wszystko oprócz cyfr [^0-9]
    \s biały znak [ \n\r\t\f]
    \S wszystko oprócz białych
    znaków
    [^ \n\r\t\f]
    . Kropka [^\n]

    View full-size slide

  54. Alternatives

    View full-size slide

  55. Alternatives
    /Kirk|Spock/
    Kirk

    View full-size slide

  56. Alternatives
    /Kirk|Spock/
    Kirk
    Spock

    View full-size slide

  57. Alternatives
    /Kirk|Spock/
    Kirk
    Spock
    Kirk Spock

    View full-size slide

  58. Metacharacters - Quantifier
    /Ca*pti+n K?i{1,3}rk/

    View full-size slide

  59. /Ca*pti+n K?i{1,3}rk/
    Kwantyfikator określa powtórzenia poprzedniego znaku lub grupy
    Metacharacters - Quantifier

    View full-size slide

  60. /Ca*pti+n K?i{1,3}rk/
    ○ * zero lub więcej (0 → ∞)
    Metacharacters - Quantifier

    View full-size slide

  61. /Ca*pti+n K?i{1,3}rk/
    ○ * zero lub więcej (0 → ∞)
    ○ + jedno lub więcej (1 → ∞)
    Metacharacters - Quantifier

    View full-size slide

  62. /Ca*pti+n K?i{1,3}rk/
    ○ * zero lub więcej (0 → ∞)
    ○ + jedno lub więcej (1 → ∞)
    ○ ? zero lub jedno (0 → 1)
    Metacharacters - Quantifier

    View full-size slide

  63. /Ca*pti+n K?i{1,3}rk/
    ○ * zero lub więcej (0 → ∞)
    ○ + jedno lub więcej (1 → ∞)
    ○ ? zero lub jedno (0 → 1)
    ○ {x,y} od x do y (x → y)
    Metacharacters - Quantifier

    View full-size slide

  64. /Ca*pti+n K?i{1,3}rk/
    ○ * zero lub więcej (0 → ∞) = {0,}
    ○ + jedno lub więcej (1 → ∞) = {1,}
    ○ ? zero lub jedno (0 → 1) = {0,}
    ○ {x,y} od x do y (x → y)
    Metacharacters - Quantifier

    View full-size slide

  65. Quantifier - greediness

    View full-size slide

  66. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness

    View full-size slide

  67. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness

    View full-size slide

  68. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness
    /".+"/

    View full-size slide

  69. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness
    /".+"/

    View full-size slide

  70. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness
    /".+?"/

    View full-size slide

  71. Quantifier - greediness
    *?
    +?
    {,}?
    ??
    ○ Aby zmienić kwantyfikator na leniwy wystarczy dodać ?

    View full-size slide

  72. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness
    /".+"/U
    ○ Odwraca zachłanność kwantyfikatorów

    View full-size slide

  73. Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott
    Quantifier - greediness
    /"[^"]+"/

    View full-size slide

  74. Quantifier - greediness
    /"[^"]+"/
    Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott

    View full-size slide

  75. Quantifier - greediness
    /"[^"\r\n]+"/
    Dr. Leonard "Bones" McCoy,Montgomery "Scotty" Scott

    View full-size slide

  76. Assertions and anchors

    View full-size slide

  77. Assertions and anchors
    ○ Najczęściej spotykanym typem assercji jest anchor
    (kotwica)
    ○ Pozwala na szukanie wzorca na ustalonej pozycji

    View full-size slide

  78. Assertions and anchors
    ○ Najczęściej spotykanym typem assercji jest anchor
    (kotwica)
    ○ Pozwala na szukanie wzorca na ustalonej pozycji
    /^k/i
    Kirk

    View full-size slide

  79. Assertions and anchors
    ○ Znak karetki oznacza, że napis musi zaczynać się od
    znaku k
    /^k/i
    Kirk

    View full-size slide

  80. Assertions and anchors
    ○ Znak dolara oznacza, że napis musi się kończyć się
    znakiem k
    /k$/i
    Kirk

    View full-size slide

  81. Assertions and anchors
    ○ Znak dolara oznacza, że napis musi się kończyć się
    znakiem k
    ○ Dolar wyszuka koniec napisu przed znakiem nowej lini
    /k$/
    Kirk\n

    View full-size slide

  82. Assertions and anchors
    /apple/i
    Apple

    View full-size slide

  83. Assertions and anchors
    /apple/i
    Apple ✓
    Pineapple ✓

    View full-size slide

  84. Assertions and anchors
    /^apple/i
    Apple ✓
    Pineapple

    View full-size slide

  85. Assertions and anchors
    /^apple/i
    Apple ✓
    Pineapple ✘

    View full-size slide

  86. Assertions and anchors
    /apple$/i
    Apple ✓
    Apple-pie

    View full-size slide

  87. Assertions and anchors
    /apple$/i
    Apple ✓
    Apple-pie ✘

    View full-size slide

  88. Assertions and anchors
    /^apple$/i
    Apple ✓
    Apple-pie ✘

    View full-size slide

  89. Assertions and anchors
    /^apple$/i
    Apple ✓
    Pineapple ✘
    Apple-pie ✘

    View full-size slide

  90. Assertions and anchors
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy

    View full-size slide

  91. Assertions and anchors
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy
    /^c\w+/im

    View full-size slide

  92. Assertions and anchors
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy
    /^c\w+/im
    ○ Karetka (^) wyszuka pasujące ciągi, zaraz po znaku nowej
    lini

    View full-size slide

  93. Assertions and anchors
    /\Ac\w+/im
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy

    View full-size slide

  94. Assertions and anchors
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy
    ○ \A oznacza, że napis jest szukany tylko na samym
    początku
    /\Ac\w+/im

    View full-size slide

  95. Assertions and anchors
    Captain James T. Kirk
    Commander Spock
    Commander Dr. Leonard McCoy
    ○ \A oznacza, że ciąg jest szukany tylko na samym początku
    napisu
    ○ \Z wyszuka sam koniec napisu przed znakiem nowej linii
    ○ \z wyszuka koniec napisu
    /\Ac\w+/im

    View full-size slide

  96. Word boundaries
    right to vote

    View full-size slide

  97. Word boundaries
    right to vote

    View full-size slide

  98. Word boundaries
    right to vote
    /\bto\b/

    View full-size slide

  99. Word boundaries
    right to vote
    /\bto\b/

    View full-size slide

  100. Word boundaries
    right to vote
    /\bto\b/

    View full-size slide

  101. Word boundaries
    come together
    /\bto\b/

    View full-size slide

  102. Word boundaries
    come together ✘
    /\bto\b/

    View full-size slide

  103. Word boundaries
    come together
    /\bto\B/

    View full-size slide

  104. Word boundaries
    come together
    /\bto\B/

    View full-size slide

  105. Word boundaries
    nr2br
    /\B2\B/

    View full-size slide

  106. Word boundaries
    nr2br ✓
    /\B2\B/

    View full-size slide

  107. Other assertions
    ○ Możemy tworzyć własne asercje
    ○ Służy do tego konstrukcja ?=

    View full-size slide

  108. Other assertions
    Kirk,Spock,McCoy
    /[a-z]+(?=,)/i
    ○ Positive look ahead
    ○ Pozytywne przewidywanie (positive assertions)

    View full-size slide

  109. Other assertions
    Kirk,Spock;McCoy
    /[a-z]+(?=,|;)/i
    ○ Positive look ahead
    ○ Pozytywne przewidywanie (positive assertions)
    ○ Można używać alternatywy

    View full-size slide

  110. Other assertions
    Kirk,Spock,McCoy
    /Kirk(?!,Spock)/i

    Negative look ahead

    Negatywne przewidywanie (negative assertions)

    View full-size slide

  111. Other assertions
    Kirk,Spock,McCoy ✘
    /Kirk(?!,Spock)/i

    Negative look ahead

    Negatywne przewidywanie (negative assertions)

    View full-size slide

  112. Other assertions
    Kirk,Spock,McCoy ✘
    Kirk,McCoy,Spock ✓
    /Kirk(?!,Spock)/i

    Negative look ahead

    Negatywne przewidywanie (negative assertions)

    View full-size slide

  113. Other assertions
    Spock,Kirk,McCoy
    /(?=Spock,)Kirk/i

    Jak dopasować coś przed kursorem?

    View full-size slide

  114. Other assertions
    Spock,Kirk,McCoy
    /(?=Spock,)Kirk/i

    Jak dopasować coś przed kursorem?
    Spock != Kirk

    View full-size slide

  115. Other assertions
    Spock,Kirk,McCoy
    /(?<=Spock,)Kirk/i

    Jak dopasować coś przed kursorem?

    Opcja: ?<=

    View full-size slide

  116. Other assertions
    Spock,Kirk,McCoy ✓
    /(?<=Spock,)Kirk/i

    Jak dopasować coś przed kursorem?

    Opcja: ?<= pozytywne przewidywanie wsteczne (positive
    look behind)

    View full-size slide

  117. Other assertions
    Spock,Kirk,McCoy ✓
    McCoy,Kirk,Spock ✘
    /(?○
    Opcja: ?look behind)

    View full-size slide

  118. Subpatterns
    /(captain)(kirk)/
    captainkirk

    View full-size slide

  119. Subpatterns
    /(captain)(kirk)/
    captainkirk
    ○ Za pomocą nawiasów oznaczamy podłańcuchy

    View full-size slide

  120. Subpatterns
    /(captain)(kirk)/
    captainkirk

    View full-size slide

  121. Subpatterns
    /(captain)(kirk)/
    captainkirk
    1:captain 2:kirk
    ○ Podłańcuchy mogą być użyte do wyłuskiwania części
    dopasowania

    View full-size slide

  122. Subpatterns
    /((captain)(kirk))/
    captainkirk
    2:captain 3:kirk
    ○ Podłańcuchy numerowane są od lewej do prawej
    1:captainkirk

    View full-size slide

  123. Subpatterns
    /(a.c)\1/
    ○ Do znalezionych podłańcuchów można się odwoływać
    abcabc ✓
    adcabc ✘

    View full-size slide

  124. Subpattern Options
    /(?#Komentarz w podłańcuchu.)/
    ○ W podłańcuchach można używać pewne opcje oraz
    modyfikatory.

    View full-size slide

  125. Subpattern Options
    /(?OptionPattern)/
    ○ Składnia opcji w podłańcuchach

    View full-size slide

  126. Subpattern Options
    /((?i)[a-z]+) [a-z]+/
    Captain kirk
    ○ Ustawienie braku wrażliwości na wielkość liter

    View full-size slide

  127. Subpattern Options
    /((?i)[a-z]+) [a-z]+/
    ○ Ustawienie braku wrażliwości na wielkość liter
    Captain kirk

    View full-size slide

  128. Subpattern Options
    /((?i)[a-z]+) [a-z]+/
    ○ Ustawienie braku wrażliwości na wielkość liter
    Captain kirk
    Captain Kirk ✘

    View full-size slide

  129. Non-capturing subpatterns
    /box(?:ers)?/
    ○ Użycie ?: zaraz po nawiasie otwierającym podłańcuch
    spowoduje, że grupa nie zostanie przechwycona
    boxers

    View full-size slide

  130. Named subpatterns
    Captain Kirk
    /(?PCaptain) Kirk/

    View full-size slide

  131. Named subpatterns
    Captain Kirk
    /(?PCaptain) Kirk/
    rank: Captain

    View full-size slide

  132. Backtracking

    View full-size slide

  133. Backtracking
    ○ Algorytm z nawrotami

    View full-size slide

  134. Backtracking
    ○ Algorytm z nawrotami
    ○ Jeśli wybrana droga nie prowadzi do
    rozwiązania, silnik wykona nawrót do
    poprzedniego punktu, w kórym może podjąć
    decyzję.

    View full-size slide

  135. Backtracking
    ○ Algorytm z nawrotami
    ○ Jeśli wybrana droga nie prowadzi do
    rozwiązania, silnik wykona nawrót do
    poprzedniego punktu, w kórym może podjąć
    decyzję.

    View full-size slide

  136. Backtracking - example
    /\d+00/

    View full-size slide

  137. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  138. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  139. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  140. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  141. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  142. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  143. Backtracking - example
    /\d+00/
    12300
    ○ Łańcuch się skończył, a trzeba jeszcze sprawdzić 00

    View full-size slide

  144. Backtracking - example
    /\d+00/
    12300
    ○ backtrack

    View full-size slide

  145. Backtracking - example
    /\d+00/
    12300
    ○ backtrack

    View full-size slide

  146. Backtracking - example
    /\d+00/
    12300

    View full-size slide

  147. Backtracking - example
    /\d+00/
    12300 ✓

    View full-size slide

  148. Backtracking - example2
    /\d+ff/
    123dd

    View full-size slide

  149. Backtracking - example2
    /\d+ff/
    123dd

    View full-size slide

  150. Backtracking - example2
    /\d+ff/
    123dd

    View full-size slide

  151. Backtracking - example2
    /\d+ff/
    123dd

    View full-size slide

  152. Backtracking - example2
    /\d+ff/
    123dd
    ○ nie udało się znaleźć f

    View full-size slide

  153. Backtracking - example2
    /\d+ff/
    123dd
    ○ backtrack

    View full-size slide

  154. Backtracking - example2
    /\d+ff/
    123dd
    ○ backtrack

    View full-size slide

  155. Backtracking - example2
    /\d+ff/
    123dd
    ○ nie można się cofnąć dalej bo +

    View full-size slide

  156. Backtracking - example2
    /\d+ff/
    123dd ✘

    View full-size slide

  157. Backtracking - example3
    /ab??c/
    abc

    View full-size slide

  158. Backtracking - example3
    /ab??c/
    abc

    View full-size slide

  159. Backtracking - example3
    /ab??c/
    abc
    ○ Nie ma c na drugim miejscu

    View full-size slide

  160. Backtracking - example3
    /ab??c/
    abc
    ○ Nie ma c na drugim miejscu

    View full-size slide

  161. Backtracking - example3
    /ab??c/
    abc
    ○ backtrack
    ○ spróbuj dopsaować b

    View full-size slide

  162. Backtracking - example3
    /ab??c/
    abc

    View full-size slide

  163. Backtracking - example3
    /ab??c/
    abc ✓

    View full-size slide

  164. Atomic grouping

    View full-size slide

  165. Atomic grouping
    ○ Wyłączenie backtrackingu i niepozwalanie na nawroty
    może być pomocne
    ○ Celem jest przyśpieszenie nieudanych dopasowań,
    zwłaszcza przy zagnieżdżonych kwantyfikatorach

    View full-size slide

  166. Atomic grouping
    (?>regex)
    ○ Grupy atomowe nie zostaną przechwycone

    View full-size slide

  167. Atomic grouping
    (?>\d+)ff

    View full-size slide

  168. Atomic grouping
    (?>\d+)ff
    \d++ff
    ○ Aby zmienić kwantyfikator na zaborczy (possessive)
    wystarczy dodać +

    View full-size slide

  169. Atomic grouping
    (?>\d+)ff
    \d++ff
    ○ Aby zmienić kwantyfikator na zaborczy (possessive)
    wystarczy dodać +
    ○ Kwantyfikatory takie są zawsze zachłanne

    View full-size slide

  170. Atomic grouping
    (?>\d+)ff
    \d++ff
    ○ Aby zmienić kwantyfikator na zaborczy (possessive)
    wystarczy dodać +
    ○ Kwantyfikatory takie są zawsze zachłanne
    ○ Pamiętaj, że może to zmienić wynik dopasowania

    View full-size slide

  171. Atomic grouping
    /\w+d/
    abcdef
    ○ Pamiętaj, że może to zmienić wynik dopasowania
    /\w++d/

    View full-size slide

  172. Atomic grouping
    /\w+d/
    abcdef
    ○ Pamiętaj, że może to zmienić wynik dopasowania
    /\w++d/

    View full-size slide

  173. Unicode
    /^abcdef$/u

    View full-size slide

  174. Unicode
    /^abcdef$/u

    Modyfikator u

    UTF-8 Mode

    View full-size slide

  175. Unicode - UTF-8 Mode

    Kody ASCII (0-127) są identyczne

    2-4 Bajty użyte do reprezentacji znaków (Codepoints)

    Każdy codepoint jest uważany za jeden znak.

    View full-size slide

  176. Unicode
    Świerzop

    View full-size slide

  177. Unicode
    Świerzop
    /\x{015A}/u

    View full-size slide

  178. Unicode
    Świerzop
    /\x{015A}/u

    View full-size slide

  179. Unicode
    Świerzop
    /[a-z\x{0104}-\x{017C}]+/u

    View full-size slide

  180. Unicode
    Świerzop 한국어
    /\p{L}+/u

    View full-size slide

  181. Czytelność
    /foobar/x

    View full-size slide

  182. Czytelność
    Łatwo przeczytać?
    /^[a-z0-9_%.-]+@[a-z0-9.-]+\.[a-z]{2,4}$/iD

    View full-size slide

  183. Czytelność
    /
    ^ # początek łańcucha
    [a-z0-9_%.-]+ # user
    @ # delimiter @
    [a-z0-9.-]+ # domena
    \. # delimiter .
    [a-z]{2,4} # top level domain
    $ # koniec łańcucha
    /iDx

    View full-size slide

  184. Czytelność
    /
    ^ # początek łańcucha
    [a-z0-9_%.-]+ # user
    @ # delimiter @
    [a-z0-9.-]+ # domena
    \. # delimiter .
    [a-z]{2,4} # top level domain
    $ # koniec łańcucha
    /iDx

    Wszystko zaczynajace sie od znaku # do końca linii jest
    komentarzem

    View full-size slide

  185. Czytelność
    /
    ^ # początek łańcucha
    [a-z0-9_%.-]+ # user
    @ # delimiter @
    [a-z0-9.-]+ # domena
    \. # delimiter .
    [a-z]{2,4} # top level domain
    $ # koniec łańcucha
    /iDx

    Białe znaki są ignorowane jeśli nie są wyescapowane (\ )

    View full-size slide

  186. Czytelność
    /
    ^ # początek łańcucha
    [a-z0-9_%.-]+ # user
    @ # delimiter @
    [a-z0-9.-]+ # domena
    \. # delimiter .
    [a-z]{2,4} # top level domain
    $ # koniec łańcucha
    /iDx

    Białe znaki są ignorowane jeśli nie są wyescapowane (\ )

    View full-size slide

  187. PHP
    $template = "Welcome on [ship_name]!
    Sincerely,
    [captain_name]";

    View full-size slide

  188. PHP
    $template = "Welcome on [ship_name]!
    Sincerely,
    [captain_name]";
    $template = str_replace("[ship_name]",$data['ship_name'], $template);
    $template = str_replace("[captain_name]",$data[captain_name], $template);

    View full-size slide

  189. PHP
    $template = "Welcome on [ship_name]!
    Sincerely,
    [captain_name]";
    $template = preg_replace_callback('#\[([a-z_])+\]#', 'my_callback',
    $template);
    function my_callback($matches) {
    ...
    }

    View full-size slide

  190. Linki i Narzędzia
    ○ http://www.pcre.org/pcre.txt
    ○ Philip Hazel - Mastering regular expressions
    ○ http://www.regular-expressions.info/
    ○ RegexBuddy
    ○ http://rubular.com/

    View full-size slide

  191. Dziękuję
    Pytania?

    View full-size slide