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

正規表現再入門/introduction-to-regex

shin1x1
November 03, 2016

 正規表現再入門/introduction-to-regex

2016/11/03 PHPカンファレンス2016

shin1x1

November 03, 2016
Tweet

More Decks by shin1x1

Other Decks in Programming

Transcript

  1. ɹ!shin1x1
    2016//03 PHPΧϯϑΝϨϯε
    ਖ਼نදݱ࠶ೖ໳

    View Slide

  2. ৄࡉਖ਼نදݱ ਖ਼نදݱٕज़ೖ໳

    View Slide

  3. D
    .BTBTIJ4IJOCBSB!TIJOY
    "HFOEB
    w1)1ͷਖ਼نදݱ
    wϚονϯά
    wόοΫτϥοΫ
    w3F%P4

    View Slide

  4. 1)1ͷਖ਼نදݱ

    View Slide

  5. 1)1ͷਖ਼نදݱ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w1$3&

    QSFHܥ
    w104*9ਖ਼نදݱ

    FSFHܥʢ1)1Ͱඇਪ঑ɺͰഇࢭʣ
    wَं

    [email protected]ܥ

    View Slide

  6. 1)1ͷਖ਼نදݱ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w1$3&

    QSFHܥ
    w104*9ਖ਼نදݱ

    FSFHܥʢ1)1Ͱඇਪ঑ɺͰഇࢭʣ
    wَं

    [email protected]ܥ

    View Slide

  7. ਖ਼نදݱͷओͳར༻༻్
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wจࣈྻ͕Ϛον͢Δ͔Ͳ͏͔ͷ൑ผ
    wจࣈྻ͔ΒϚονͨ͠Օॴͷऔಘ
    wจࣈྻͷϚονͨ͠ՕॴΛஔ׵
    wϚονͨ͠ՕॴͰจࣈྻΛ෼ׂ

    View Slide

  8. ਖ਼نදݱͷओͳར༻༻్
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wϚον͢Δ͔Ͳ͏͔ͷ൑ผ
    wϚονͨ͠Օॴͷऔಘ

    [email protected]
    [email protected]@BMM
    [email protected]

    wϚονͨ͠Օॴͷஔ׵

    [email protected]
    [email protected]

    wϚονͨ͠ՕॴͰจࣈྻΛ෼ׂ

    [email protected]

    View Slide

  9. Ϛονϯά

    View Slide

  10. Ϛονϯάͷಛ௃
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wਖ਼نදݱ͸ؤுΓ԰
    w࠷ॳʹϚονͨ͠΋ͷ͕༏ઌ
    wඪ४ͷྔࢦఆࢠ͸ཉுΓʢHSFFEZʣ

    View Slide

  11. Ϛονϯάͷಛ௃
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wਖ਼نදݱ͸ؤுΓ԰
    w࠷ॳʹϚονͨ͠΋ͷ͕༏ઌ
    wඪ४ͷྔࢦఆࢠ͸ཉுΓʢHSFFEZʣ
    ࠷௕࠷ࠨϚονϯά

    View Slide

  12. ਖ਼نදݱ͸ؤுΓ԰
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wϚον͢Δ·ͰऔΓಘΔશͯͷύλʔϯΛࢼߦ

    Ϛον͢Ε͹ऴྃ
    wऔΓಘΔશͯͷύλʔϯ͕Ϛον͠ͳ͍

    Ϛονࣦഊ
    wϚονࣦഊͷ৔߹ɺॲཧྔ͕๲େʹͳΔՄೳੑ

    View Slide

  13. B
    aE

    View Slide

  14. B
    aE
    aEΛͰϚον

    View Slide

  15. B
    aE
    ͱB͸Ϛον͠ͳ͍

    View Slide

  16. B
    aE
    aEΛͰϚον
    όοΫτϥοΫ

    View Slide

  17. B
    aE
    ͱ͸Ϛον͠ͳ͍

    View Slide

  18. B
    aE
    จࣈྻΛਐΊͯ

    aEΛͰϚον

    View Slide

  19. B
    aE
    ͱB͸Ϛον͠ͳ͍

    View Slide

  20. B
    aE
    จࣈྻΛਐΊΔͱ

    aE͕Ϛον͢Δ΋ͷ͕ແ͍
    Ϛονࣦഊ

    View Slide

  21. ࠷ॳʹϚονͨ͠΋ͷ͕༏ઌ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wจࣈྻ಺Ͱ࠷΋ࠨʹ͋ΔϚον͕༏ઌ

    ʢ࠷ॳʹϚονͨ͠Օॴʣ
    wਖ਼نදݱʢબ୒ʣͷฒͼͰ͸ͳ͍

    View Slide

  22. 1FO1JOFBQQMF"QQMF1FO

    View Slide

  23. 1FO1JOFBQQMF"QQMF1FO
    ?1FO
    Ϛον͢Δ

    View Slide

  24. 1FO1JOFBQQMF"QQMF1FO
    1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  25. 1FO1JOFBQQMF"QQMF1FO
    1FO
    จࣈྻͷࠨଆͰϚονͨ͠΋ͷ͕༏ઌ
    ʢ্ͷύλʔϯͰऴྃʣ
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  26. 1FO1JOFBQQMF"QQMF1FO
    "QQMFc1FO

    View Slide

  27. 1FO1JOFBQQMF"QQMF1FO
    "QQMFc1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  28. 1FO1JOFBQQMF"QQMF1FO
    "QQMFc1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    จࣈྻͷࠨଆͰϚονͨ͠΋ͷ͕༏ઌ

    View Slide

  29. ඪ४ͷྔࢦఆࢠ͸ཉுΓ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wඪ४ͷྔࢦఆࢠ͸ɺ࠷௕ʹϚον
    wσϑΥϧτͰ͸࠷େྔࢦఆࢠͱͯ͠ಈ͘

    View Slide

  30. ྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w௚લͷύλʔϯͷ܁Γฦ͠Λࣔ͢
    wɺɺ ɺ\O N^
    wBͳΒʮBʯʮBBCʯʮDBBBBCʯͳͲʹϚον

    View Slide

  31. 1FO1JOFBQQMF"QQMF1FO
    1O
    ճҎ্

    View Slide

  32. 1FO1JOFBQQMF"QQMF1FO
    1O
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  33. 1FO1JOFBQQMF"QQMF1FO
    1O
    ඪ४ͷྔࢦఆࢠ͸࠷௕ͰϚον

    View Slide

  34. 1FO1JOFBQQMF"QQMF1FO
    1O
    ճҎ্

    View Slide

  35. 1FO1JOFBQQMF"QQMF1FO
    1 O
    ΋͘͠͸ճ
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  36. 1FO1JOFBQQMF"QQMF1FO
    1 O
    ΋͘͠͸ճ
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  37. 1\ ^O
    ճҎ্ճҎԼ
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO

    View Slide

  38. 1\ ^O
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    1FO1JOFBQQMF"QQMF1FO
    ճҎ্ճҎԼ

    View Slide

  39. ྔࢦఆࢠͷϚονϯάύλʔϯ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w࠷େྔࢦఆࢠʢσϑΥϧτʣ
    w࠷খྔࢦఆࢠ
    wઈର࠷େྔࢦఆࢠ

    View Slide

  40. ࠷େྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wྔࢦఆࢠσϑΥϧτͷಈ͖
    w \O N^
    w࠷௕ʹϚονɺཉுΓͳϚον

    View Slide

  41. ࠷খྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wྔࢦఆࢠʹ Λ෇͚ͯࢦఆ
    w ɺ ɺ ɺ\O N^
    w࠷খͷϚονɺ߇͑ΊͳϚον

    View Slide

  42. 1FO1JOFBQQMF"QQMF1FO
    1O
    ࠷௕ͰϚον

    View Slide

  43. 1FO1JOFBQQMF"QQMF1FO
    1 O
    ࠷୹ͰϚον

    View Slide

  44. GPPBOECBS
    GPPΛϚον͍ͨ͠

    View Slide

  45. ࠷େྔࢦఆࢠ
    GPPBOECBS

    View Slide

  46. >
    Ҏ֎ͷ܁Γฦ͠
    GPPBOECBS

    View Slide


  47. ࠷খྔࢦఆࢠ
    GPPBOECBS

    View Slide

  48. ࠷େྔࢦఆࢠͱ࠷খྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w࠷େྔࢦఆࢠ࠷௕Ұக͔Βࢼߦ͍ͯ͘͠
    w࠷খྔࢦఆࢠ࠷୹Ұக͔Βࢼߦ͍ͯ͘͠
    wϚον͠ͳ͍৔߹ͲͪΒ΋ಉ͡ࢼߦΛߦ͏

    View Slide

  49. ઈର࠷େྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wྔࢦఆࢠʹΛ෇͚ͯࢦఆ
    wɺɺ ɺ\O N^
    wڧཉͳϚονɺఘΊͳ͍Ϛον

    View Slide

  50. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛονࣦഊ

    View Slide

  51. όοΫτϥοΫ

    View Slide

  52. όοΫτϥοΫ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wϚον͕ࣦഊͨ͠৔߹ʹ

    લͷਖ਼نදݱʹ໭ΓɺผͷϚονΛߦ͏
    wਖ਼͍͠ղΛಘΔ·ͰՄೳͳ૊Έ߹ΘͤΛ

    ޮ཰తʹࢼ͍ͯ͘͠
    https://ja.wikipedia.org/wiki/όοΫτϥοΩϯά

    View Slide

  53. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ

    View Slide

  54. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ

    View Slide

  55. 1FO1JOFBQQMF"QQMF1FO
    1O
    Oͱߦ຤ͳͷͰ
    Ϛον͠ͳ͍

    View Slide

  56. 1FO1JOFBQQMF"QQMF1FO
    1O
    จࣈ୹ͯ͘͠Ϛον
    όοΫτϥοΫ

    View Slide

  57. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον੒ޭ

    View Slide

  58. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ

    View Slide

  59. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ
    Ϛονͨ͠ൣғΛΞτϛοΫʹѻ͏

    View Slide

  60. 1FO1JOFBQQMF"QQMF1FO
    1O
    Oͱߦ຤ͳͷͰ
    Ϛον͠ͳ͍

    View Slide

  61. 1FO1JOFBQQMF"QQMF1FO
    1O
    ͰϚονͨ͠Օॴͷ࠶୳ࠪ͸ߦΘͣɺ
    ਖ਼نදݱΛ1͔ΒϚον͠௚͢

    View Slide

  62. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ
    Ϛονͨ͠ൣғΛΞτϛοΫʹѻ͏

    View Slide

  63. 1FO1JOFBQQMF"QQMF1FO
    1O
    Oͱߦ຤ͳͷͰ
    Ϛον͠ͳ͍

    View Slide

  64. 1FO1JOFBQQMF"QQMF1FO
    1O
    ͰϚονͨ͠Օॴͷ࠶୳ࠪ͸ߦΘͣɺ
    ਖ਼نදݱΛ1͔ΒϚον͠௚͢

    View Slide

  65. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛον͢Δ
    Ϛονͨ͠ൣғΛΞτϛοΫʹѻ͏

    View Slide

  66. 1FO1JOFBQQMF"QQMF1FO
    1O
    Oͱߦ຤ͳͷͰ
    Ϛον͠ͳ͍

    View Slide

  67. 1FO1JOFBQQMF"QQMF1FO
    1O
    Ϛονࣦഊ

    View Slide

  68. ઈର࠷େྔࢦఆࢠ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wҰ౓Ϛονϯάͨ͠ൣғΛΞτϛοΫʹѻ͍ɺ

    όοΫτϥοΫͰख์͞ͳ͍
    wΞτϛοΫάϧʔϓͰ΋ಉ༷ͷޮՌ


    Ͱ΋ಉ༷ͷޮՌ
    wόοΫτϥοΫൃੜ਺Λ཈͑Δ

    View Slide

  69. SFHVMBSFYQSFTTJPOT
    D
    .BTBTIJ4IJOCBSB!TIJOY
    https://regex101.com/

    View Slide

  70. View Slide

  71. όοΫτϥοΫʹΑΔ
    %P4

    View Slide

  72. http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016

    View Slide

  73. w4UBDL0WFSqPXͰ෼ؒΞΫηεෆೳ
    wจࣈྻલޙͷۭനΛ࡟আ͢Δਖ਼نදݱ
    w?

    View Slide

  74. ݕূ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    [email protected]
    1)1
    w୯७Խͯ͠ɺaTͱaTͰݕূ
    w/ݸͷۭന`B`ʹରͯ͠ॲཧ

    View Slide

  75. /TQBDFTB 1)1 1)1
    NT NT
    NT NT
    NT NT
    NT NT
    [email protected]

    aT

    View Slide

  76. /TQBDFTB 1)1 1)1
    NT NT
    NT NT
    NT NT

    NT

    aTൺ
    NT
    aTൺ
    [email protected]

    aT

    View Slide

  77. ରԠࡦ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wઈର࠷େྔࢦఆࢠͰόοΫτϥοΫΛ཈੍
    wจࣈྻ௕ΛόϦσʔγϣϯͰ੍ݶ
    wਖ਼نදݱΛ࢖Θͳ͍

    4UBDL0WFSqPXͰͷରԠ

    จࣈྻؔ਺Ͱஔ׵͑

    View Slide

  78. 3F%P4

    View Slide

  79. 3F%P4
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wਖ਼نදݱΛѱ༻ͨ͠%P4
    w೥͔Β໰୊ఏى͞Ε͍ͯͨ
    wϚον͠ͳ͍ύλʔϯͰ߈ܸ
    https://www.checkmarx.com/wp-content/uploads/2015/03/ReDoS-Attacks.pdf

    View Slide

  80. https://www.checkmarx.com/wp-content/uploads/2015/03/ReDoS-Attacks.pdf

    View Slide

  81. &WJM3FHFY1BUUFSOT
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w B

    w

    View Slide

  82. BBBBBBBBBBBBBBBBBBB9
    B

    View Slide

  83. TUFQT ࢀߟ

    յ໓తͳόοΫτϥοΫ
    B

    BBBBBBBBBBBBBBBBBBB9

    View Slide

  84. &WJM3FHFY1BUUFSOT
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wΘ͔ͣจࣈͷจࣈྻͰ΋

    ૊Έ߹Θͤരൃ͕ى͜Δ
    wྔࢦఆࢠͷೖΕࢠɺબ୒ͱྔࢦఆࢠͷೖΕࢠ

    View Slide

  85. 1)1Ͱ࣮ߦ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    preg_match('/(a+)+$/', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaX');
    1)1 1)1
    [email protected]
    NT NT
    ଎͍ʂʂʂ

    View Slide

  86. όοΫτϥοΫ੍ݶ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wઃఆʹΑΔόοΫτϥοΫ੍ݶ

    [email protected]ʢσϑΥϧτ͸ ʣ
    w্ݶʹୡ͢ΔͱΤϥʔͰऴྃ
    [email protected]
    ͷ໭Γ஋͕GBMTF

    ΤϥʔΛࣔ͢
    [email protected]@FSSPS
    ͰΤϥʔίʔυऔಘ

    View Slide

  87. 1)1Ͱ࣮ߦ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    preg_match('/(a+)+$/', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaX', $m);


    $error = preg_last_error();

    if ($error === PREG_BACKTRACK_LIMIT_ERROR) {

    echo 'backtrack limit error', PHP_EOL;

    } else if ($error > 0) {

    echo 'other error', PHP_EOL;

    }
    $ php redos.php
    backtrack limit error

    View Slide

  88. 1)1Ͱ࣮ߦʢ੍ݶ֎͠ʣ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    ini_set('pcre.backtrack_limit', 10000000000);
    preg_match('/(a+)+$/', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaX');
    1)1 1)1
    [email protected]
    NT NT
    ͕͔͔࣌ؒΔ

    View Slide

  89. $47ͷύʔε
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wਖ਼نදݱͰ࣮૷
    w1P$ͳ$47Λύʔε͢Δͱ

    4FHNFOUBUJPO'BVMUʢ1)1ʣ
    wHPPECZDTWͰॻ͖௚ͯ͠ରԠ

    View Slide

  90. ·ͱΊ

    View Slide

  91. ·ͱΊ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    wϚονϯάͷྲྀΕ
    wύϑΥʔϚϯε΁ͷӨڹ
    wਖ਼نදݱΛ͋͑ͯ࢖Θͳ͍બ୒ࢶ

    View Slide

  92. ࢀߟ
    D
    .BTBTIJ4IJOCBSB!TIJOY
    w4UBDL&YDIBOHF͕߈ܸ͞Εͨ3F%P4ͷޮՌcZPIHBLJTCMPH

    IUUQTCMPHPIHBLJOFUTUBDLFYDIBOHFSFEPTBUUBDL
    w3F%P4ͷճආcZPIHBLJTCMPH

    IUUQTCMPHPIHBLJOFUBWPJEJOHSFEPT

    View Slide

  93. D
    .BTBTIJ4IJOCBSB!TIJOY
    !TIJOY
    !TIJOY
    D
    .BTBTIJ4IJOCBSB!TIJOY

    View Slide