Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「正規表現をつくる」をつくる / make "make regex"
Search
TSUYUSATO Kitsune
November 13, 2025
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「正規表現をつくる」をつくる / make "make regex"
YAPC::Fukuoka 2025での発表『「正規表現をつくる」をつくる』のスライドです。
TSUYUSATO Kitsune
November 13, 2025
More Decks by TSUYUSATO Kitsune
See All by TSUYUSATO Kitsune
dewasm - WebAssembly to Source Code translator
makenowjust
0
110
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
2.1k
最近の研究とか、RubyへのContributionとか / Recent My Study and Ruby Contributions
makenowjust
2
350
Make Parsers Compatible Using Automata Learning
makenowjust
3
13k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
100
Regular Expressions, REXML, Automata Learning
makenowjust
0
520
オートマトン学習しろ / Do automata learning
makenowjust
3
650
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
520
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
1
2.4k
Other Decks in Programming
See All in Programming
Kotlinの15年とServer-Side Kotlin
n_takehata
1
190
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
5k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.2k
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
690
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
320
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
110
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.1k
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
350
Next.js: The final boss of Web Performance
guaca
0
380
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
260
Railsバージョンを4倍にした話
optim
0
900
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.6k
Chasing Engaging Ingredients in Design
codingconduct
0
380
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Docker and Python
trallard
47
4.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
HDC tutorial
michielstock
2
990
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
310
30 Presentation Tips
portentint
PRO
1
450
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
650
Transcript
make "make regex" QSFTFOUFECZ@makenowjust )JSPZB'VKJOBNJ BUYAPC::Fukuoka ʮਖ਼نදݱΛͭ͘ΔʯΛ ɹͭ͘Δ
౻࿘େ (Hiroya Fujinami) ࣗݾհ w /** ࠃཱใֶݚڀॴ ͷത࢜՝ఔͷֶੜ w
ઐਖ਼نදݱɾΦʔτϚτϯཧ w ࠷ۙɺΦʔτϚτϯֶश BVUPNBUBMFBSOJOH ໊ू߹ OPNJOBMTFU ʹؔ৺͕͋Δ w 3VCZίϛολᴷᴷදతͳߩݙਖ਼نදݱͷϝϞԽʹΑΔߴԽ w 4503&4ͱ͍͏ձࣾͰόΠτΛ͍ͯ͠Δ 3BJMTͰͷ8FC։ൃ
!NBLF@OPX@KVTU !NBLFOPXKVTU
:"1$ͷࢥ͍ग़ ࣗݾհ w YAPC::Japan::Onlineʹͯ ʮ3F%P4ݕग़ͷ࠷ઌSFDIFDLͷհʯͱ͍͏ൃදΛͨ͠ w ͦͷͱ͖ɺຊདྷͳΒϐβ͕ಧͣͩͬͨ͘ͷ͕ͩ ϐβϋοτͷૹҬ֎ͱ͍͏͜ͱͰಧ͔ͳ͔ͬͨ w
͍͘͠ͷͰࣗͰϐβΛങ͖ͬͯͯ৯͍ͯͨهԱ͕͋Δ w ࠙ձͰϐβ͕ग़ͨΒ৯ਚ͍ͨ͘͠
ਖ਼نදݱɺॻ͖͍ͨͰ͔͢ʁ
ୀ۶ͳ͜ͱ1 ʹΒͤΑ͏
͕ɺ ͦͷͨΊʹਖ਼نදݱΛ ॻ͔ͳ͚Ε͍͚ͳ͍
ͦ͏ͩ ʮਖ਼نදݱΛॻ͍ͯ͘ΕΔʯ ϓϩάϥϜΛॻ͜͏
make "make regex" QSFTFOUFECZ@makenowjust )JSPZB'VKJOBNJ BUYAPC::Fukuoka ʮਖ਼نදݱΛͭ͘ΔʯΛ ɹͭ͘Δ
͋ΘΑ͘ɺ ΦʔτϚτϯཧΛ ͑Δͱ͍͍ͳ ઐͳͷͰ
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ ੜ"* --. ཧతͳํ๏ 1FSMͰ ؆୯ͳղܾࡦ 1
2 3
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ 2 2
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ 2 ځ 2
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ 2 ځ 2 ڀ
զʑͷٻΊΔͱ͜Ζ ʮਖ਼نදݱΛॻ͍ͯ͘ΕΔʯ ϓϩάϥϜ͕ཉ͍͠ ͷ֬ೝ
ීஈͲ͏ͬͯਖ਼نදݱΛॻ͘ʁ ͲΜͳਖ਼نදݱ͕ ཉ͍͠ͷ͔ʁ ༷ɾݴޠԽ 1 ςετέʔεΛ ߟ͑Δ 2 ࣮ࡍʹ
ਖ਼نදݱΛॻ͘ 3
ීஈͲ͏ͬͯਖ਼نදݱΛॻ͘ʁ ͲΜͳਖ਼نදݱ͕ ཉ͍͠ͷ͔ʁ ༷ɾݴޠԽ 1 ςετέʔεΛ ߟ͑Δ 2 ࣮ࡍʹ
ਖ਼نදݱΛॻ͘ 3 ͜ͷ෦Λলུ͍ͨ͠
ීஈͲ͏ͬͯਖ਼نදݱΛॻ͘ʁ ͲΜͳਖ਼نදݱ͕ ཉ͍͠ͷ͔ʁ ༷ɾݴޠԽ 1 ςετέʔεΛ ߟ͑Δ 2 ࣮ࡍʹ
ਖ਼نදݱΛॻ͘ 3 ͜ͷ෦Λলུ͍ͨ͠ ϝʔϧΞυϨεʹϚον ͢Δਖ਼نදݱ͕ཉ͍͠ "
[email protected]
" "ex@
[email protected]
"
ઃఆ զʑͷٻΊΔͱ͜Ζ ʮਖ਼نදݱΛॻ͍ͯ͘ΕΔʯ ϓϩάϥϜ͕ཉ͍͠ ͦͷͨΊʹ͍࣋ͬͯΔͷ ͑Δͷ ཁٻ ࡶͳ༷ 1
ςετέʔε 2 ϝʔϧΞυϨεʹϚον ͢Δਖ਼نදݱ͕ཉ͍͠ "
[email protected]
" "ex@
[email protected]
"
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ 2 ʮਖ਼نදݱΛॻ͘ʯ ϓϩάϥϜ͕ ཉ͍͠ ࡶͳ ༷ ςετ έʔε ځ 2 ڀ
Regexp::Assemble 1FSMͰ w Regexp::Assembleͱ͍͏Ϟδϡʔϧ͕͋Δ w ෳͷจࣈྻਖ਼نදݱΛ·ͱΊͯͭͷਖ਼نදݱʹͰ͖Δ use Regexp::Assemble; my
$r = Regexp::Assemble->new; $r->add('
[email protected]
'); $r->add('
[email protected]
'); $r->add('
[email protected]
'); print $r->re; (?:aaa|bbb|ccc)@example.com
Regexp::Assembleͷ w ϧʔϓ +* ΛࣗಈͰ࡞ͬͯ͘Εͳ͍ w ʮϚονͯ͠΄͘͠ͳ͍ςετέʔεʯʹରԠ͍ͯ͠ͳ͍ use Regexp::Assemble;
my $r = Regexp::Assemble->new; $r->add('
[email protected]
'); $r->add('
[email protected]
'); $r->add('
[email protected]
'); print $r->re; [a-c]
[email protected]
ຊ͜͏ͳͬͯ΄͍͠
[email protected]
͜ΕΓ͗ͩ͢ͱ͍͑ͨ
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ Regexp::Assemble 2 ʮਖ਼نදݱΛॻ͘ʯ ϓϩάϥϜ͕ ཉ͍͠ ࡶͳ ༷ ςετ έʔε ځ 2 ڀ
ೳಈతΦʔτϚτϯֶश ཧతͳํ๏ w ςετέʔε͔Β༗ݶঢ়ଶΦʔτϚτϯΛߏங͢ΔΛ ʮೳಈతΦʔτϚτϯֶश QBTTJWFBVUPNBUBMFBSOJOH ʯͱݺͿ w දతͳΞϧΰϦζϜ31/* 3FHVMBS1PTJUJWFBOE/FHBUJWF*OGFSFODF
0ODJB(BSDÍB *OGFSSJOHSFHVMBSMBOHVBHFTJOQPMZOPNJOBMVQEBUFUJNF 111, 000, 11101, 01 0, 1, 00, 01 Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ 0 0 0 1 1 1 (1ͷݸ-0ͷݸ)%3=0
31/*ͷΞΠσΟΞ (1/4) ཧతͳํ๏ w ʮϚονͯ͠΄͍͠จࣈྻʯ͔ΒQSF fi YUSFFͷΦʔτϚτϯΛ࡞Δ 111, 000,
11101, 01 ε 1 1 11 111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0
31/*ͷΞΠσΟΞ (2/4) ཧతͳํ๏ w ͭͷঢ়ଶΛϚʔδͯ͠Έͯɺ݁ՌͷΦʔτϚτϯ͕ ʮϚονͯ͠΄͘͠ͳ͍จࣈྻʯΛຬ͔ͨ͢ςετ ε 1 1
11 111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0 0, 1, 00, 01
31/*ͷΞΠσΟΞ (2/4) ཧతͳํ๏ w ͭͷঢ়ଶΛϚʔδͯ͠Έͯɺ݁ՌͷΦʔτϚτϯ͕ ʮϚονͯ͠΄͘͠ͳ͍จࣈྻʯΛຬ͔ͨ͢ςετ ε 1 1
11 111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0 0, 1, 00, 01
31/*ͷΞΠσΟΞ (2/4) ཧతͳํ๏ w ͭͷঢ়ଶΛϚʔδͯ͠Έͯɺ݁ՌͷΦʔτϚτϯ͕ ʮϚονͯ͠΄͘͠ͳ͍จࣈྻʯΛຬ͔ͨ͢ςετ ε 1 1
11 111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0 0, 1, 00, 01 Ϛονͯ͠΄͘͠ͳ͍ͷʹ Ϛονͯ͠͠·͏
31/*ͷΞΠσΟΞ (3/4) ཧతͳํ๏ w ʮϚονͯ͠΄͘͠ͳ͍จࣈྻʯΛຬͨ͢ʮ্ख͍ϚʔδʯΛ୳͢ ε 1 1 11
111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0 0, 1, 00, 01
31/*ͷΞΠσΟΞ (3/4) ཧతͳํ๏ w ʮϚονͯ͠΄͘͠ͳ͍จࣈྻʯΛຬͨ͢ʮ্ख͍ϚʔδʯΛ୳͢ ε 1 1 11
111 0 01 00 000 1110 11101 1 1 0 1 0 0 1 0 0, 1, 00, 01
31/*ͷΞΠσΟΞ (4/4) ཧతͳํ๏ w ʮ্ख͍ϚʔδʯΛ܁Γฦ͍ͯ͘͠ͱɺతͷΦʔτϚτϯ͕ಘΒΕΔ 0, 1, 00, 01
111, 000, 11101, 01 Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ 0 0 0 1 1 1 (1ͷݸ-0ͷݸ)%3=0
31/*ͷ w ʮΦʔτϚτϯཧ͍͢͝ʂʯͱࢥ͑Δ͕ʜʜ
31/*ͷ w ʮΦʔτϚτϯཧ͍͢͝ʂʯͱࢥ͑Δ͕ʜʜ ΦʔτϚτϯ ਖ਼نදݱͰͳ͍
ΦʔτϚτϯͱਖ਼نදݱͷؔ େֶͷߨٛͷ෮श w ʮΦʔτϚτϯͱਖ਼نදݱ૬ޓʹมՄೳʯ ,MFFOFʹΑΔ w ͨͩ͠ɺΦʔτϚτϯΛ ਓ͕ؒಡΈ͍͢ਖ਼نදݱʹม͢Δ͜ͱ͍͠
0 0 0 1 1 1 /\A(?:01|(?:1|00)(?:10)*(?:0|11)| (?:(?:01|(?:1|00)(?:10)*(?:0|11))?) (?:(?:(?:01|(?:1|00)(?:10)*(?:0| 11))?)*)(?:(?:01|(?:1|00) (?:10)*(?:0|11))?))?\z/ (1ͷݸ-0ͷݸ)%3=0 ಡΊͳ͍ɾϝϯςͰ͖Μ
1FSMͷ࣮ ཧతͳՌແྗͳͷ͔ʜʜ
ʻݺΜͩʁ
͍ͬͦ"*ʹཔͬͯΈΔ ੜ"* --. w ʮϓϩάϥϜΛॻ͘ϓϩάϥϜʯͱݴ͑ੜ"* w ࣗવݴޠ͔ΒͦΕͬΆ͍ਖ਼نදݱΛ࡞ͬͯ͘Ε͍ͯ͢͝ ϝʔϧΞυϨεʹϚον ͢Δਖ਼نදݱ͕ཉ͍͠
/^\S+@\S+\.\S+$/
"*ʹཔͬͨͱ͖ͷ (1/2) ੜ"* --. w ςετέʔεΛຬ͍ͨͯ͠Δ͔ͷνΣοΫ ࣗͰ͢Δඞཁ͕͋Δ /^\S+@\S+\.\S+$/ "ex@
[email protected]
"
ʹϚονͯ͠͠·͏ʂ
"*ʹཔͬͨͱ͖ͷ (2/2) ੜ"* --. w 3F%P4 ਖ਼نදݱͷ੬ऑੑ ͷՄೳੑ͕͋Δ w ؔ࿈ݚڀ4JEEJRFUBM
6OEFSTUBOEJOH3FHVMBS&YQSFTTJPO%FOJBMPG4FSWJDF 3F%P4 *OTJHIUTGSPN--.(FOFSBUFE3FHFYFTBOE%FWFMPQFS'PSVNT *$1$ /^\S+@\S+\.\S+$/ "@." x 2048 . "\n" ͷϚονʹඵ͔͔Δ ⽘͘Β͍͕੬ऑ
3F%P4ͱ 3FHVMBS&YQSFTTJPO%FOJBMPG4FSWJDF w ਖ਼نදݱͱಛఆͷจࣈྻͷϚονΛ͢Δͱ͖ʹ ҟৗͳ͕͔͔࣌ؒͬͯ͠·͍ɺαʔϏεͷఏڙʹӨڹ͕ग़Δ੬ऑੑ $ time node -e
'/^(a|a)*$/.exec("a".repeat(29) + "b")' 34.65s user 0.26s system 99% cpu 35.249 total
3F%P4ͱ 3FHVMBS&YQSFTTJPO%FOJBMPG4FSWJDF w ਖ਼نදݱͱಛఆͷจࣈྻͷϚονΛ͢Δͱ͖ʹ ҟৗͳ͕͔͔࣌ؒͬͯ͠·͍ɺαʔϏεͷఏڙʹӨڹ͕ग़Δ੬ऑੑ w ৄ͘͠YAPC::Japan::OnlineͷࣗͷൃදΛ IUUQTTQFBLFSEFDLDPNNBLFOPXKVTUTUBUFPGUIFBSUPG SFEPTEFUFDUJPOFEBEFDDFCBBE
SFEPTSFDIFDL ࠓ͙͢ݕࡧʂ
1FSMͷ࣮μ ϝɺཧμ ϝɺ ੜ"*μ ϝ ͳΒɺͲ͏͢Ε͍͍Μͩ
࣮ཧͦΜͳʹγϣϘ͘ͳ͍ w ਖ਼نදݱͷ߹ TZOUIFTJ[F ɾम෮ SFQBJS ͱ͍͏͕ ͱͯ׆ൃʹݚڀ͞Ε͍ͯΔ w ਖ਼نදݱͷ߹ɾम෮ςετέʔεΛຬͨ͢ਖ਼نදݱΛͭ͘Δ
w ؔ࿈ݚڀ<1BOFUBM 0014-"> <-JFUBM "4&> <-JFUBM 64&/*9> <$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*> <4VOHFUBM > ʜʜ
࣮ཧͦΜͳʹγϣϘ͘ͳ͍ w ਖ਼نදݱͷ߹ TZOUIFTJ[F ɾम෮ SFQBJS ͱ͍͏͕ ͱͯ׆ൃʹݚڀ͞Ε͍ͯΔ w ਖ਼نදݱͷ߹ɾम෮ςετέʔεΛຬͨ͢ਖ਼نදݱΛͭ͘Δ
w ؔ࿈ݚڀ<1BOFUBM 0014-"> <-JFUBM "4&> <-JFUBM 64&/*9> <$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*> <4VOHFUBM > ʜʜ
ਖ਼نදݱͷ߹ɾम෮ͷΞΠσΟΞ w ਖ਼نදݱͷςϯϓϨʔτΛ୳ࡧͰվྑ͍ͯ͘͠ w ਖ਼نදݱͷςϯϓϨʔτϋί˘ΛؚΉ ϋί˘ͲΜͳਖ਼نදݱͰೖΕΔ͜ͱ͕Ͱ͖Δ݀ ϓϨʔεϗϧμʔ w ϋί˘ʹจࣈΫϥεΛೖΕͯ
ςετέʔεΛຬ͔ͨ͢Ͳ͏͔ΛνΣοΫ͢Δ w μϝͳ߹ɺϋί˘Λ͞Βʹ۩ମతͳਖ਼نදݱͰஔ͖͑ͯ୳ࡧ <$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*>
ਖ਼نදݱͷ߹ɾम෮ͷྫ (1/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□/ ॳظঢ়ଶ
ਖ਼نදݱͷ߹ɾम෮ͷྫ (2/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□/ ϋί˘ͭʹ จࣈΫϥεΛೖΕΔ͚ͩͰ ςετέʔεΛຬͨ͢ͷ ϜϦ
ਖ਼نදݱͷ߹ɾम෮ͷྫ (3/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□|□/ •/□□/ •/□*/ ϋί˘ΛΑΓ۩ମతͳ ਖ਼نදݱʹஔ͖͑ͯ ୳ࡧΩϡʔʹՃ
ਖ਼نදݱͷ߹ɾम෮ͷྫ (4/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□|□/ •/□□/ •/□*/ /□|□//□□/ จࣈΫϥεΛೖΕͯ ςετέʔεΛຬͨ͢ͷ ϜϦ
ਖ਼نදݱͷ߹ɾम෮ͷྫ (5/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□|□/ •/□□/ •/□*/ /[a-d]*/ͱ͢Δͱ Ұݟ͍͚ͦ͏͕ͩ Ϛονͯ͠΄͘͠ͳ͍ จࣈྻʹϚονͯ͠͠·͏
ਖ਼نදݱͷ߹ɾम෮ͷྫ (6/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□*|□*/ •/□*□*/ •… ࠶ɺϋί˘Λ ۩ମతͳਖ਼نදݱʹ ஔ͖͑ͯ୳ࡧ
ਖ਼نදݱͷ߹ɾम෮ͷྫ (7/7) ab, cd, abab, ccdd ac, bc, ad,
bd Ϛονͯ͠΄͍͠จࣈྻ Ϛονͯ͠΄͘͠ͳ͍จࣈྻ ୳ࡧΩϡʔ •/□*|□*/ •/□*□*/ •… /[ab]*|[cd]*/ͱ͢Δ ͜ͱͰతͷਖ਼نදݱʹʂ
ϋί˘ͷຒΊํ w ϋί˘ΛຒΊΔจࣈΫϥε4"5ιϧόΛܾͬͯఆ͢Δ w ςετέʔεͰਖ਼نදݱϚονΛͯ͠ɺ ˘ʹͨͬͨΒཧࣜΛՃ͢ΔΠϝʔδ <$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ
1-%*> ˘ c˘ Ϛονͯ͠΄͍͠ ab (□1 = a ∧ □1 = b) ∨ (□2 = a ∧ □2 = b) Ϛονͯ͠΄͘͠ͳ͍ bc ¬(□1 = b ∧ □1 = c) ∧ ¬(□2 = b ∧ □2 = c)
4"5ιϧόΛ͏ͱ͍͍͜ͱ w ୯ʹϋί˘ʹจࣈΫϥεΛຒΊΔ͚ͩͰͳ͘ɺ Ճͷ੍ΛೖΕΔ͜ͱͰ༷ʑͳʹରԠͰ͖Δ w ྫ͑ɺذ|܁Γฦ͠*͕ᐆດʹͳΒͳ͍ a|aͷΑ͏ͳɺࠨӈͲͪΒͰBͰϚονͯ͠͠·͏͜ͱ͕ͳ͍ ͱ͍͏੍ΛೖΕΔ͜ͱͰɺ3F%P4͕ى͜Βͳ͍͜ͱ͕อূͰ͖Δ
<$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*> ˘c<BC> 3F%P4ରࡦ੍ □1 ≠ a ∧ □1 ≠ b ˘c˘ □1 ≠ □2
ϋί˘Λͬͨํ๏ͷ w ϋί˘͔ͭΒ࢝ΊΔͱɺతͷਖ਼نදݱʹḷΓண͘·Ͱʹ ͱ͕͔͔ͯ࣌ؒΔ w ςετέʔεΛຬͨ͢࠷খͷਖ਼نදݱΛ୳͢ /1IBSEͰ͋Δ͜ͱ͕ΒΕ͍ͯΔ ˘ ˘
˘c˘ ˘˘ ˘c˘ ˘˘ ˘˘˘ ˘c˘ ˘ ˘ ˘c˘ ˘ ˘ ʜʜ
࿕ใ࣮ϋί˘͔ͭΒ ࢝Ίͳͯ͘ྑ͍ ਖ਼نදݱͷम෮ SFQBJS ΞϧΰϦζϜͰ͋ΔͷͰ
ʮ࠷ॳͷਖ਼نදݱʯ͕͋Ε͍͍ ਖ਼نදݱͷम෮ SFQBJS w ϋί͔ͭΒ࢝ΊΔΘΓʹʮ࠷ॳͷਖ਼نදݱʯΛ༩͑Δ͜ͱ͕Ͱ͖Δ w ʮ࠷ॳͷਖ਼نදݱʯͷจࣈɾจࣈΫϥεͷ෦Λ ϋί˘Ͱஔ͖͍͑ͯ͘͜ͱͰɺతͷਖ਼نදݱʹ͍͍ۙͯ͘ /^\S+@\S+\.\S+$/
/^□+@□+\.□+$/ /^[^@]+@[^.@]+\.[^@]+$/
ʮ࠷ॳͷਖ਼نදݱʯΛ "*ʹॻ͔ͤΕ͍͍ͷͰʁ
৽ͨͳղܾࡦ ͷ֬ೝ ϩʔυϚοϓ τʔΫͷྲྀΕ 1 3 ੜ"* --. ཧతͳํ๏
1FSMͰ ؆୯ͳղܾࡦ Regexp::Assemble RPNI ReDoSͳͲͷ 2 ʮਖ਼نදݱΛॻ͘ʯ ϓϩάϥϜ͕ ཉ͍͠ ࡶͳ ༷ ςετ έʔε ੜAI (LLM) Ͱ ʮ࠷ॳͷਖ਼نදݱʯ Λੜ ਖ਼نදݱͷम෮ ΞϧΰϦζϜ ځ 2 ڀ
ϘΫ͕ߟ͑ͨ࠷ڧͷʮਖ਼نදݱΛॻ͍ͯ͘ΕΔʯ γεςϜͷΠϝʔδਤ ͜͏͍͏ ਖ਼نදݱ͕ ཉ͍͠ ͜͏͍͏จࣈྻʹ Ϛονͯ͠ ΄͍͠ɾ΄͘͠ͳ͍ ਖ਼نදݱम෮
ΞϧΰϦζϜ ੜ"* ࠷ॳͷਖ਼نදݱ తͷਖ਼نදݱ ࣗવݴޠʹΑΔ༷ ςετέʔε
Ͱɺ࣮ʁ
Ӷҙɺ࡞த ؒʹ߹͍·ͤΜͰͨ͠ʜʜ
࣮͕ؒʹ߹Θͳ͔ͬͨཧ༝ ݴ͍༁ w ਖ਼نදݱͷम෮ͷݚڀ <$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*> ͷ࣮ͷιʔείʔυ͕ެ։͞Ε͍ͯͳ͍ ࣮ݧΛ࠶ݱ͢ΔͨΊͷԾڥͷΠϝʔδ͚ͩ͋Δ
w ݱ࣮ੈքͷਖ਼نදݱʹ͑ΔͨΊͷύʔαจࣈΫϥεͷ࣮͕େม w ࠷͔ۙͬͨ͠ υΠπʹߦͬͨΓΠϯυʹߦͬͨΓ͍ͯͨ͠ IUUQTHJUIVCDPNTQPOTPSTNBLFOPXKVTU (JU)VCεϙϯαʔืूத
͔͑ͨͬͨ͜ͱ ·ͱΊ w ੜ"*ʹਖ਼نදݱΛॻ͔ͤΔͷ͍͍͚Ͳɺ3F%P4͕ى͜Βͳ͍͔ɺ ຊʹతͷจࣈྻʹϚον͢Δɾ͠ͳ͍͔νΣοΫ͠Α͏ʂ
͔͑ͨͬͨ͜ͱ ·ͱΊ w ੜ"*ʹਖ਼نදݱΛॻ͔ͤΔͷ͍͍͚Ͳɺ3F%P4͕ى͜Βͳ͍͔ɺ ຊʹతͷจࣈྻʹϚον͢Δɾ͠ͳ͍͔νΣοΫ͠Α͏ʂ w ҰൠͷϓϩάϥϜͩͱˢͷ͜ͱಓʹΔ͔͠ͳ͍ ͚ΕͲɺਖ਼نදݱͳΒ৭ʑͱݚڀ͕͞Ε͍ͯΔͷͰɺ ཧతʹղܾͰ͖Δ͜ͱ͋Δ
͔͑ͨͬͨ͜ͱ ·ͱΊ w ੜ"*ʹਖ਼نදݱΛॻ͔ͤΔͷ͍͍͚Ͳɺ3F%P4͕ى͜Βͳ͍͔ɺ ຊʹతͷจࣈྻʹϚον͢Δɾ͠ͳ͍͔νΣοΫ͠Α͏ʂ w ҰൠͷϓϩάϥϜͩͱˢͷ͜ͱಓʹΔ͔͠ͳ͍ ͚ΕͲɺਖ਼نදݱͳΒ৭ʑͱݚڀ͕͞Ε͍ͯΔͷͰɺ ཧతʹղܾͰ͖Δ͜ͱ͋Δ w
ָ͍͠ਖ਼نදݱϥΠϑΛʂ
͔͜͜Β࣭ٙԠ༻
31/*ͷྫͰग़͖ͯͨਖ਼نදݱ w ࣮ࡍʹͬͱ͍ͷʹͰ͖Δ w ͕ɺͦΕʹৄࡉͳΦʔτϚτϯͷߏͷੳ͕ඞཁͰɺ ػցతʹΔͷ؆୯Ͱͳ͍ ͱࢥ͏ 0 0
0 1 1 1 /\A(0(01)*(1|00)|1(10)*(0|11))*\z/ (1ͷݸ-0ͷݸ)%3=0
ݱ࣮ͷਖ਼نදݱʹͲͷఔରԠͰ͖Δʁ w ઌߦݚڀ<$IJEB5FSBVDIJ 41> <$IJEB5FSBVDIJ 1-%*> ࣮ੈքͷਖ਼نදݱΛରʹ͍ͯ͠Δ w ͭ·ΓઌಡΈɾޙಡΈޙํࢀরΛؚΉਖ਼نදݱʹରͯ͠ ͪΌΜͱಈ࡞͢ΔΑ͏ʹͳ͍ͬͯΔ
w ͞ΒʹɺςετέʔεʹΩϟϓνϟͷใ·ͰೖΕΔͱɺ ͦ͜·Ͱߟྀͨ͠ਖ਼نදݱΛ࡞Δ͜ͱ͕Ͱ͖Δ
"*ʹΑΔʮ࠷ॳͷਖ਼نදݱʯͱम෮ͷίετ w ʮ࠷ॳͷਖ਼نදݱʯΛ༩͑ͨ߹Ͱɺ ͱͯ͠/1IBSEͰ͋Δ͜ͱมΘΒͳ͍ w తͷਖ਼نදݱʹ͚ۙΕ͍ۙ΄Ͳ୳ࡧૣ͘ऴΘΔͷͰɺ "*ͰͳΔ͘తͷͷʹ͍ۙʮ࠷ॳͷਖ਼نදݱʯ͕ಘΒΕΕɺ म෮ΞϧΰϦζϜૣ͍ஈ֊ͰऴΘΔͣɺͱ͍͏ظ͕͋Δ
ݱࡏͷਐḿঢ়گ w ༷ʑͳਖ਼نදݱ࣮ +BWB4DSJQU 1FSM 3VCZ 1ZUIPO /&5 ʹରԠͰ͖Δ ਖ਼نදݱͷύʔαͰ͖͍ͯΔ
w จࣈΫϥεͳͲͷࡉ͔ͳڍಈ͕·࣮ͩͰ͖͓ͯΒͣɺ म෮ΞϧΰϦζϜͷ࣮͕࢝ΊΒΕ͍ͯͳ͍ w म෮ΞϧΰϦζϜࣗମͦ͜·Ͱେม͡Όͳͦ͞͏