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

正規表現改善報告する回 / Regexp memoization progress report

正規表現改善報告する回 / Regexp memoization progress report

RubyKaigi 2023 follow up( https://rhc.connpass.com/event/288535/) での発表資料です。

TSUYUSATO Kitsune

August 19, 2023
Tweet

More Decks by TSUYUSATO Kitsune

Other Decks in Programming

Transcript

  1. ੍໿#FGPSF w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?(<x>)yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1

    ʮ෦෼ࣜͷݺͼग़͠ʯ(?<x>foo)\g<x> w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ 
  2. w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?(<x>)yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?<x>foo)\g<x>

    w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS  ཧ࿦తʹແཧ ͋·Γ࢖ΘΕͯͳ͍
  3. w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?(<x>)yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?<x>foo)\g<x>

    w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS  ཧ࿦తʹແཧ ͋·Γ࢖ΘΕͯͳ͍ ͦΜͳʹ ѱ͘ͳ͍ʁ
  4. ࣮૷ͷमਖ਼఺ w ࣮ࡍͷϝϞԽςʔϒϧ͸CJU഑ྻͳͷͰɺ 
 ઌಡΈɾޙಡΈɾΞτϛοΫά ϧʔϓ಺ͷঢ়ଶʹରͯ͠͸ 
 CJU࢖ͬͯϝϞԽ͢ΔΑ͏ʹͨ͠ w ͜Ε·Ͱ͸ʮ͋Δঢ়ଶʹ͋ΔҐஔͰ౸ୡͨ͠ʯͱ͍͏৘ใΛه࿥͍͕ͯͨ͠ɺ

    
 ʮ͋Δঢ়ଶʹ͋ΔҐஔ͔ΒͷϚονʹࣦഊͨ͠ʯͱ͍͏৘ใʹ͢ΔͨΊɺ 
 όοΫτϥοΫதʹϝϞԽςʔϒϧΛߋ৽͢ΔΑ͏ʹͨ͠  IUUQTHJUIVCDPNSVCZSVCZQVMM
  5. ݱࡏͷ੍໿ w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮ৚݅෼ذʯ(?(<x>)yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?<x>foo)\g<x> w ͦͷଞɺಾͷ੍໿ͨͪ

    
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ઌಡΈɾޙಡΈͱΞτϛοΫά ϧʔϓ͕ωετͰ͖ͳ͍ 
 ઌಡΈɾޙಡΈɾΞτϛοΫά ϧʔϓͷதͰΩϟϓνϟ͸࢖͑ͳ͍