$30 off During Our Annual Pro Sale. View Details »

ReDoS 検出の最先端 recheck の紹介 / State of the Art of ReDoS Detection

ReDoS 検出の最先端 recheck の紹介 / State of the Art of ReDoS Detection

TSUYUSATO Kitsune

March 04, 2022
Tweet

More Decks by TSUYUSATO Kitsune

Other Decks in Programming

Transcript

  1. ϠόΠɻ

  2. 3F%P4ϠόΠɻ

  3. ·͡ͰϠόΠΑɺϚδϠόΠɻ

  4. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 ͜ͷίϐϖΛɺ
  5. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 ͜ͷਖ਼نදݱͰϚονϯά͢Δͱɺ /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/
  6. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ ໿ඵ͔͔Δɻ ˞.BD#PPL1SP J ্Ͱ/PEF KTͰ࣮ߦͨ݁͠Ռ
  7. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ จࣈͰඵ͔͔Δͷ͸ϠόΠɻ
  8. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ ݱ୅ͷ$16͕ɺ ඵͰจࣈఔ౓ॲཧͰ͖ͳ͍Θ͚͕ͳ͍ɻ
  9. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ ͡Ό͋Կ͕ѱ͍ʁ
  10. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ ਖ਼نදݱͷϚονϯά࣌ؒͷരൃɺ
  11. ϠόΠɻӉ஦ϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ 
 Ӊ஦ϠόΠɻ 
 ·ͣ޿͍ɻ΋͏޿͍ͳΜͯ΋Μ͡Όͳ͍ɻ௒޿͍ɻ 
 ޿͍ͱ͔ͬͯ΋ 
 ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ 


    ͱ͔ɺ΋͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ 
 Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λ௒ӽͯ͠Δɻແݶͩ͠௒޿͍ɻ 
 ͔͠΋๲ுͯ͠ΔΒ͍͠ɻϠόΠΑɺ๲ுͩΑɻ 
 ͩͬͯී௨͸஍ٿͱ͔๲ு͠ͳ͍͡ΌΜɻͩͬͯࣗ෼ͷ෦԰ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔௒ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ 
 ௨ֶ࿏͕৳ͼͯɺҰ೥ͷͱ͖͸ెา෼ͩͬͨͷʹɺࡾ೥ͷͱ͖͸ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ 
 ͔ͩΒ஍ٿͱ͔๲ு͠ͳ͍ɻ࿩ͷΘ͔ΔϠπͩɻ 
 ͚ͲӉ஦͸ϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻ๲ு͠·͘Γɻ࠷΋ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠΋Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ 
 ແݶ͍͚ͬͯͨͲɺ΋͔ͨ͠͠Β༗ݶ͔΋͠Μͳ͍ɻͰ΋༗ݶͬͯࣄʹ͢Δͱ 
 ʮ͡Ό͋ɺӉ஦ͷ୺ͷ֎ଆͬͯφχΑʁʯ 
 ͬͯࣄʹͳΔ͠ɺͦΕ͸୭΋Θ͔Βͳ͍ɻϠόΠɻ୭ʹ΋෼͔Βͳ͍ͳΜͯੌ͗͢Δɻ 
 ͋ͱ௒פ͍ɻ໿έϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋ΋ͳ͘ࢮ͵ɻා͍ɻ 
 ͦΕʹ௒Կ΋ແ͍ɻ௒ΨϥΨϥɻͦΕʹ௒ͷΜͼΓɻԯ೥ͱ͔ฏؾͰग़ͯ͘Δɻԯ೥ͯɻখֶੜͰ΋ݴΘͶ͐Αɺ࠷ۙɻ 
 ͳΜͭͬͯ΋Ӊ஦͸അྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ 
 ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵ෼ܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠ࢖ͬͨΓ͢ ͷʹɺ 
 Ӊ஦͸શવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ 
 ͱʹ͔͘و༷ΒɺӉ஦ͷϠό͞Λ΋ͬͱ஌Δ΂͖ͩͱࢥ͍·͢ɻ 
 /^.+(Ӊ஦|ϠόΠ|[\s\S])*.+$/ ͜Ε͕3F%P4ɻ
  12. @MakeNowJust ౻࿘େ໻ cYAPC::Japan::Online 2022 3F%P4ݕग़ͷ࠷ઌ୺ 
 SFDIFDLͷ঺հ 

  13. ਖ਼نදݱͷϚονϯά࣌ؒ͸ 
 രൃ͢Δ 

  14. Ͳ͏ʹ͔ͯ͠ਖ਼نදݱΛ 
 ҆શʹ࢖͍͍ͨ ʮʜʜ%'"ܕͷϚονϯάʹ͢Ε͹ʁʯ ʮʜʜλΠϜΞ΢τ͢Ε͹͍͍Μ͡Όͳ͍ʁʯ 

  15. ͢΂ͯͷਖ਼نදݱͷϚονϯά͕࣌ؒ 
 രൃ͢ΔΘ͚͡Όͳ͍ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/ 

  16. ਖ਼نදݱ͕҆શ͔Ͳ͏͔Λ൑ఆ͍ͨ͠ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/ 

  17. ˠ3F%P4ݕग़ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/ 

  18. രൃ͢Δਖ਼نදݱͷಛ௃ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/ 

  19. ਖ਼نදݱͷരൃͷ࢓ํ͸छྨ͋Δ จࣈྻͷ௕͞ ʹରͯ͠Ϛονϯά࣌ؒͷ࠷ѱܭࢉྔ͕ɺ ʹͳΔ ࢦ਺తͳ ৔߹ 
 ɹྫ/^(fizz|buzz|fizzbuzz)*$/ ߈ܸจࣈྻ('fizzbuzz' x

    27) . 'x' 
 ɹจࣈҎԼͰ߈ܸͰ͖ΔͨΊͱͯ΋ϠόΠɻ ʹͳΔ ৐తͳ ৔߹ 
 ɹྫ/^<[^<]*@[^>]*>$/ ߈ܸจࣈྻ'<' . ('@' x 54773) 
 ɹ߈ܸʹ͸਺ઍʙ਺ສจࣈඞཁͳͨΊɺۓٸ౓͸௿Ίɻ 
 ɹ͔͠͠ɺ4UBDL0WFS fl PX΍$MPVE fl BSF͕࣮ࡍʹ3F%P4Ͱμ΢ϯͨ͠ͷ͸͜ͷέʔεɻ n O(2n) O(n2) 
  20. ʹͳΔ ࢦ਺తͳ ৔߹ͷಛ௃ O(2n) ܁Γฦ͠ͷதͷϚονϯάͷ࢓ํ͕ᐆດ ྫ͑͹/^(fizz|buzz|fizzbuzz)*$/ͷ৔߹ɺ 
 "fizzbuzz"ͷϚονϯάͷ࢓ํ͕ɺ 
 1."fizzbuzz"ͱ2."fizzbuzz"ͷ௨Γ͋Δɻ

    "fizzbuzz"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ 
 ྆ํͷ௨ΓํΛͦΕͧΕʹରͯ͠ࢼ͞ͳ͚Ε͹͍͚ͳ͍ͨΊɺ 
 ࢦ਺తͳ ͷܭࢉྔʹͳΔɻ O(2n) 
  21. ʹͳΔ ৐తͳ ৔߹ͷಛ௃ O(n2) ͭͷ܁Γฦ͠ͱͦͷؒͷϚονϯάͷ࢓ํ͕ᐆດ ྫ͑͹/^<[^<]*@[^>]*>$/ͷ৔߹ɺ 
 "@"ͷจࣈͰ[^<]*ͱ[^>]*Λ܁Γฦ͢ͷͱ 
 @Ͱ܁Γฦ͠ΛҠಈ͢Δ͜ͱ͕Ͱ͖Δɻ

    "@"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ 
 Ͳ͜Ͱࠨ͔Βӈͷ܁Γฦ͠ʹҠಈ͢Δ͔͕ᐆດʹͳΔͨΊɺ 
 ৐తͳ ͷܭࢉྔʹͳΔɻ O(n2) 
  22. ͡Ό͋ਖ਼نදݱΛݟͯ 
 ൑அ͢Ε͹͍͍ʁ 

  23. ͦΕ͸݁ߏ೉͍͠ ׳ΕΔͱ݁ߏ΍ΕΔ͚Ͳɺ 
 ਖ਼֬ੑΛอূ͢Δͷ͸೉͍͠ 
 ਖ਼نදݱ͸SFHFYMJCDPNΑΓ /([^\.\?\!]*)[\.\?\!]/ /"((\\")|[^"(\\")])+"/ /^[0-9]{1,}(,[0-9]+){0,}$/ /"[^"\r\n]*"/

    /(\S*)+(\u007C)+(\S*)/ /\s*[a-zA^Z,\s]+\s*$/ 
  24. ΦʔτϚτϯʹม׵ͯ͠ΈΑ͏ 

  25. ʹͳΔ ࢦ਺తͳ ৔߹ͷಛ௃ O(2n) &%" &YQPOFOUJBM%FHSFF"NCJHVJUZ ߏ଄ q fizz buzz

    fizzbuzz q w w ͋Δจࣈྻ Ͱ͋Δঢ়ଶ ʹ 
 ໭ͬͯ͘Δํ๏͕௨Γ͋Δ w q q fizzbuzz fizzbuzz ੔ཧ 
  26. ʹͳΔ ৐తͳ ৔߹ͷಛ௃ O(n2) *%" *O fi OJUF%FHSFF"NCJHVJUZ ߏ଄ q1

    q2 [^<] [^>] @ q1 q2 w ಉ͡จࣈྻ Ͱঢ়ଶ ʹ໭ͬͯ͜Εͯɺ 
 ͦͷؒ΋ભҠͰ͖Δɻ w q1 , q2 w w 
  27. &%"ߏ଄ɾ*%"ߏ଄ͷ୳ࡧΞϧΰϦζϜ ΦʔτϚτϯͷੵߏ੒ͷΑ͏ʹͯ͠ঢ়ଶΛ૊ʹͨ͠ΦʔτϚτϯΛߏ੒͢Δɻ 
 ͷͱ͖ʹ  ͜ͷભҠؔ਺Λڧ࿈݁੒෼෼ղͯ͠ɺ 
 ಉ͡ڧ࿈݁੒෼ʹ ͱ 

    ͨͩ͠ ͷΑ͏ͳ 
 ঢ়ଶͷ૊͕͋Ε͹&%"ߏ଄͕ଘࡏ͢Δɻ *%"ߏ଄ͷ৔߹͸ɺঢ়ଶΛͭ૊ʹͯ͠ 
 ͱ ͷΑ͏ͳ૊Λ୳͢͜ͱͰൃݟͰ͖Δɻ q11 a q12 ∧ q21 a q22 (q11 , q21 ) a (q12 , q22 ) (q1 , q1 ) (q2 , q3 ) q2 ≠ q3 (q1 , q1 , q2 ) (q1 , q2 , q2 ) 
  28. &%"ߏ଄ɾ*%"ߏ଄ͷੑ࣭ &%"ߏ଄͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕ࢦ਺తʹͳΔ *%"ߏ଄͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕৐తʹͳΔɻ ͭ·Γɺ ɹɹ&%"ߏ଄ɾ*%"ߏ଄ͷଘࡏΛ൑ఆ͢Δ͜ͱͰɺ 
 ɹɹਖ਼نදݱͷϚονϯά͕࣌ؒരൃ͢Δ͔͸ 


    ɹɹཧ࿦తʹ͸ਖ਼֬ʹ൑ఆͰ͖Δɻ ⟺ ⟺ 
  29. 3F%P4ݕग़ɾ׬ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʜʜʁ 

  30. ຊ౰ʹʁ 

  31. ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք  ༗ݶঢ়ଶΦʔτϚτϯΛར༻͍ͯ͠ΔͷͰɺ 
 ม׵ͷͰ͖ͳ͍ޙํࢀর \1, \2 ͷΑ͏ͳ֦ு͕͋Δͱղੳ͕ෆՄೳɻ  /<(\w+)>(.*?)<\/\1>/

    /(["'])[^"']+\1/
  32. ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք  ղੳΞϧΰϦζϜͷܭࢉྔ΋ঢ়ଶ਺ʹରͯ͠ ͱɺ 
 ෳࡶͳਖ਼نදݱͷ৔߹͸ղੳʹ͕͔͔࣌ؒΔɻ ͞ΒʹɺόοΫτϥοΫͷڍಈΛਖ਼֬ʹ࠶ݱ͢Δ৔߹͸ܾఆԽ͕ඞཁʹͳΓɺ 
 ͦͷ৔߹ͷղੳͷܭࢉྔ͸ࢦ਺తʹͳͬͯ͠·͏ɻ O(n6)

     /(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/
  33. ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ͭ·Γɺਖ਼نදݱ͕ෳࡶͳ৔߹΍ɺਖ਼نݴޠͰͳ͍֦ுʹରͯ͠͸ɺ 
 ΦʔτϚτϯͷղੳʹΑΔݕग़͸ແྗ  /<(\w+)>(.*?)<\/\1>/ /(["'])[^"']+\1/ /(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/

  34. 3F%P4ݕग़ͷ࠷ઌ୺΁ 

  35. ಈతղੳ 
 ࣮ࡍʹϚονϯάΛߦͳͬͯɺ࣌ؒͷ͔͔Δ΋ͷΛ୳͢ ਖ਼نදݱ 
 ࣮૷ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢Δ΋ͷΛൃݟ 3F%P4੬ऑ

    
 ͱͯ͠ݕग़ "foo" จࣈྻ 
  36. ϑΝδϯά 
 จࣈྻΛϥϯμϜʹͨ͘͞Μੜ੒ͯ͠ɺಈతղੳΛ͢Δ "foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ 
 ࣮૷

    ೖྗ Ϛονϯά͕࣌ؒ രൃ͢Δ΋ͷΛൃݟ 3F%P4੬ऑ 
 ͱͯ͠ݕग़ 
  37. Ҩ఻తΞϧΰϦζϜ 
 Ϛονϯάʹ࣌ؒͷ͔͔ΔจࣈྻΛֻ͚߹Θͤͯɺ 
 ΑΓ࣌ؒͷ͔͔ΔจࣈྻΛੜ੒͢Δ Ҩ఻తΞϧΰϦζϜͰ 
 Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ "foo" "bar"

    "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ 
 ࣮૷ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢Δ΋ͷΛൃݟ 3F%P4੬ऑ 
 ͱͯ͠ݕग़ 
  38. ϑΝδϯάʹΑΔ3F%P4ݕग़ ಈతղੳʹΑΔ3F%P4ݕग़ख๏ɻ ϥϯμϜੑ͕͋ΔͷͰਖ਼֬ੑʹ΍΍೉͕͋Δ͕ Ͱ͖ͳ͍ΑΓ͸Ϛγ ɺ 
 ޙํࢀরͳͲͷ֦ு΍ঢ়ଶ਺ͷଟ͘ͳΔෳࡶͳਖ਼نදݱʹ΋ରԠͰ͖Δɻ Ҩ఻తΞϧΰϦζϜͰ 
 Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ

    "foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ 
 ࣮૷ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢Δ΋ͷΛൃݟ 3F%P4੬ऑ 
 ͱͯ͠ݕग़ 
  39. ϑΝδϯά࠷ڧʁ 

  40. ͳ৔߹ͷ߈ܸจࣈྻ͸ 
 ਺ઍʙ਺ສจࣈ O(n2) 

  41. Ԑ͕γΣΠΫεϐΞΛॻ͘ͷΛ 
 ଴ͭΘ͚ʹ͸͍͔ͳ͍ ͍͘ΒҨ఻తΞϧΰϦζϜΛ࢖ͬͯ΋ɺ ਺ສจࣈͷ࠷దԽΛ্ख͘ߦ͏Ͱ͖Δ͔͸ӡήʔͳͷͰɺ ͷ৔߹͸͏·͘ൃݟͰ͖ͳ͍͜ͱ͕ଟ͘ͳͬͯ͠·͏ O(n2) 

  42. จࣈྻͷ܁Γฦ͠ߏ଄ Ϛονϯά࣌ؒΛരൃͤ͞Δจࣈྻ͸෦෼తʹ܁Γฦ͍ͯ͠Δɻ 
 ྫ('fizzbuzz' x 27) . 'x' '<' .

    ('@' x 54773)  ੜ੒͞ΕΔจࣈྻʹ࣍ͷ จࣈΛ܁Γฦ͢ͱ͍͏ҙຯͷه߸ Λ௥Ճͯ͠ɺ 
 ͦΕΛؚΊͯϑΝδϯάΛߦ͏ɻ ͜ΕʹΑͬͯɺ৐తͳ৔߹Ͱ΋ϑΝδϯάʹΑͬͯݕग़͕ՄೳʹͳΔɻ n □ n 
  43. ϑΝδϯά࠷ڧ 
 ͲͷΑ͏ͳ৔߹Ͱ΋രൃ͢Δਖ਼نදݱΛਖ਼͘͠ൃݟͰ͖ΔΑ͏ʹͳͬͨ 

  44. ࣮૷͸ʁ 

  45. None
  46. SFDIFDL ൃදऀ !.BLF/PX+VTU ͷ։ൃ͍ͯ͠Δ3F%P4ݕग़ϥΠϒϥϦɻ ࣮૷ݴޠ͸4DBMBɻ+BWB4DSJQU͔Β΋ར༻Մೳɻ ࠓճઆ໌ͨ͠ɺΦʔτϚτϯͷղੳʹΑΔํ๏ͱϑΝδϯάʹΑΔํ๏ͷ 
 ྆ํͷํ๏Λ࣮૷͍ͯ͠Δɻ IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDL 

  47. ΦʔτϚτϯͷղੳ͸ਖ਼͚֬ͩͲɺ 
 ͕͔͔࣌ؒΓͦ͏ͳ৔߹͸ϑΝδϯάʹ੾Γସ͍͑ͨ 

  48. ݕग़ख๏ͷࣗಈ੾Γସ͑ SFDIFDLͰ͸ɺՄೳͳݶΓΦʔτϚτϯͷղੳʹΑΔख๏Λ࢖ͬͯɺ 
 ࣌ؒతɾਫ਼౓తʹϑΝδϯάͷํ͕ద੾ͩͱ൑அͨ͠৔߹ʹɺ 
 ϑΝδϯάʹ੾Γସ͑Δػೳ͕࣮૷͞Ε͍ͯΔɻ 
 σϑΥϧτͰ͜ͷϞʔυʹͳ͍ͬͯΔɻ  ͲͪΒ͕ద੾͔͸ɺਖ਼نදݱͷେ͖͞΍

    
 ΦʔτϚτϯͷঢ়ଶ਺ͳͲ͔Β൑அ͞ΕΔɻ 
  49. ରԠ͍ͯ͠Δਖ਼نදݱͷํݴ ݱࡏ͸+BWB4DSJQUͷਖ਼نදݱʹͷΈରԠɻ /&5 +BWB 1$3& 1FSM 1ZUIPO 3VCZͷਖ਼نදݱͷରԠΛ࣮૷தɻ +BWB4DSJQUҎ֎ͷݴޠͷਖ਼نදݱ͸͋·Γݫີͳ࢓༷͕ͳ͍ͷͰɺ 


    ͳΜͱͳ͘ରԠ͢Δ༧ఆɻ 
  50. ࣮૷ؒʹ߹Θͳͯ͘ ͝ΊΜͳ͍͞ 

  51. ࢖͍ํ ී௨ʹϥΠϒϥϦͱͯ͠࢖͑Δɻ const { check } = require('recheck'); 
 console.log(await

    check('^(a|a)*$', '')); &4-JOUͷϓϥάΠϯ eslint-plugin-redos ΋ެ։͍ͯ͠ΔͷͰɺ 
 &4-JOUΛ࢖͍ͬͯΔϓϩδΣΫτʹ͙͢ʹಋೖՄೳɻ 
  52. IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDLQMBZHSPVOE 

  53. ଎౓ ݸͷਖ਼نදݱͷ3F%P4ݕग़ʹ෼ඵɻ ฏۉͯ͠ɺਖ਼نදݱݸลΓඵఔ౓ɻ ମײͱͯ͠͸ɺ$*ͳͲͰར༻͢Δ෼ʹ͸े෼࢖͑Δɻ ΤσΟλͳͲͰϦΞϧλΠϜʹݕग़͠ଓ͚Δͱɺͪΐͬͱ΋͔ͨͭ͘΋ɻ 

  54. ࣮੷ ࣮ࡍʹ͍͔ͭ͘ͷϥΠϒϥϦͷ੬ऑੑΛൃݟɺใࠂ͍͍ͯ͠Δɻ NBSLEPXOJU 
 ɾIUUQTHJUIVCDPNNBSLEPXOJUNBSLEPXOJUTFDVSJUZBEWJTPSJFT()4"WGDRWGWSD NBSLFE 
 ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"SSSNRKNWIG 
 ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"WISDYYHK

    SFDIFDLΛ࢖ͬͯ੬ऑੑΛൃݟͨ͠৔߹ɺͪ͜Βʹ΋࿈བྷ͍͚ͯͨͩ͠Δͱ͋Γ͕͍ͨͰ͢ɻ 
  55. ͋ͳͨͱSFDIFDLɺ ࠓ͙͢μ΢ϯϩʔυ 

  56. ൃදͷ·ͱΊ w 3F%P4ݕग़͸਺ֶతʹఆࣜԽͰ͖Δղ͚Δ໰୊ɻ 
 ͳΜ͔;Θͬͱͨ͠ؾ෼Ͱܭࢉྔ͕രൃ͢ΔΘ͚Ͱ͸ͳ͍ɻ w ͱ͸͍͑ݱ࣮ͷਖ਼نදݱΛର৅ʹ͢Δͱ໰୊͕͋ΔͷͰɺ 
 ϑΝδϯάͳͲΛซ༻͢Δͷ͕࠷ઌ୺ͷ3F%P4ݕग़ɻ w

    3F%P4ݕग़ϥΠϒϥϦͱͯ͠SFDIFDL͕͋Δɻ࢖ͬͯ΍͍ͬͯͩ͘͞ɻ w ͱ͸͍͑׬શʹਖ਼֬ͳ3F%P4ݕग़Λݱ࣮తͳ࣌ؒͰߦ͏ͷ͸ 
 ΄ͱΜͲෆՄೳͳͷͰɺݕग़݁Ռ͚ͩΛݟͯ҆શͩͱ൑அͤͣɺ 
 λΠϜΞ΢τͳͲΛೖΕΔ΋ͷॏཁɻ 
  57. ׬ 

  58. ݕূϑΣʔζ ࣮ࡍͷਖ਼نදݱ࣮૷͸࠷దԽͳͲ͕͞Ε͍ͯͯɺ 
 ཧ࿦௨ΓʹϚονϯά͕࣌ؒ૿Ճ͠ͳ͍Մೳੑ͕͋Δɻ ͦͷΑ͏ͳ৔߹ͷͨΊʹSFDIFDLͰ͸ɺ 
 ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ 
 Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰ͸ແޮ