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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
TSUYUSATO Kitsune
November 13, 2025
Programming
1.8k
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
83
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
2k
最近の研究とか、RubyへのContributionとか / Recent My Study and Ruby Contributions
makenowjust
2
340
Make Parsers Compatible Using Automata Learning
makenowjust
3
13k
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
90
Regular Expressions, REXML, Automata Learning
makenowjust
0
500
オートマトン学習しろ / Do automata learning
makenowjust
3
640
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
510
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
1
2.3k
Other Decks in Programming
See All in Programming
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
190
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
JRuby: Past, Present, and Future
headius
0
180
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
1
8.8k
スマート反転とウェブアクセシビリティ
camiha
0
210
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
160
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
510
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
300
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
430
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
260
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
480
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
HDC tutorial
michielstock
2
880
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Designing for Performance
lara
611
70k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
The Invisible Side of Design
smashingmag
301
52k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
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 म෮ΞϧΰϦζϜࣗମͦ͜·Ͱେม͡Όͳͦ͞͏