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. PCRE PCRE = Perl Compatible Regular Expressions Philip Hazel University

    Computing Service Cambridge CB2 3QH, England.
  2. 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'
  3. /Captin .irk/ Metacharacters - Dot ◦ Kropka pasuje do dowolnego

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

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

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

    znaku ◦ Oprócz znaku nowej lini Captin _irk ✓
  7. /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 ✓
  8. \$ Metacharacters - Escape . [] () ^ $ *

    + ? {} | \ ◦ Za pomocą \ można pozbawić znak specjalnego znaczenia
  9. Price is \Q$9.99\E Metacharacters - Escape Price is $9.99 ◦

    Metaznaki wewnątrz \Q i \E stracą swoje specjalne znaczenie
  10. /[abcdef]/ Character Classes ◦ Brak separatorów między znakami ◦ Ograniczone

    nawiasami kawadratowymi ◦ Traktowane jako jeden znak
  11. /[^abc]/ Character Classes ◦ Znaki w klasie mogą być zanegowane

    ◦ Oznacza każdy znak, który nie znajduje się w klasie razem z nowymi liniami
  12. 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]
  13. 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]
  14. /Ca*pti+n K?i{1,3}rk/ ◦ * zero lub więcej (0 → ∞)

    ◦ + jedno lub więcej (1 → ∞) Metacharacters - Quantifier
  15. /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
  16. /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
  17. /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
  18. Quantifier - greediness *? +? {,}? ?? ◦ Aby zmienić

    kwantyfikator na leniwy wystarczy dodać ?
  19. Assertions and anchors ◦ Najczęściej spotykanym typem assercji jest anchor

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

    (kotwica) ◦ Pozwala na szukanie wzorca na ustalonej pozycji /^k/i Kirk
  21. Assertions and anchors ◦ Znak dolara oznacza, że napis musi

    się kończyć się znakiem k /k$/i Kirk
  22. 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
  23. 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
  24. 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
  25. 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
  26. Other assertions Kirk,Spock;McCoy /[a-z]+(?=,|;)/i ◦ Positive look ahead ◦ Pozytywne

    przewidywanie (positive assertions) ◦ Można używać alternatywy
  27. Other assertions Spock,Kirk,McCoy ✓ /(?<=Spock,)Kirk/i ◦ Jak dopasować coś przed

    kursorem? ◦ Opcja: ?<= pozytywne przewidywanie wsteczne (positive look behind)
  28. Non-capturing subpatterns /box(?:ers)?/ ◦ Użycie ?: zaraz po nawiasie otwierającym

    podłańcuch spowoduje, że grupa nie zostanie przechwycona boxers
  29. 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ę.
  30. 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ę.
  31. 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
  32. Atomic grouping (?>\d+)ff \d++ff ◦ Aby zmienić kwantyfikator na zaborczy

    (possessive) wystarczy dodać + ◦ Kwantyfikatory takie są zawsze zachłanne
  33. 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
  34. 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.
  35. 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
  36. 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
  37. 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 (\ )
  38. 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 (\ )
  39. PHP

  40. 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);
  41. PHP $template = "Welcome on [ship_name]! Sincerely, [captain_name]"; $template =

    preg_replace_callback('#\[([a-z_])+\]#', 'my_callback', $template); function my_callback($matches) { ... }
  42. Linki i Narzędzia ◦ http://www.pcre.org/pcre.txt ◦ Philip Hazel - Mastering

    regular expressions ◦ http://www.regular-expressions.info/ ◦ RegexBuddy ◦ http://rubular.com/