Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rust 製の ripgrep というツールと正規表現
Search
Yū Kobayashi
October 03, 2020
Programming
330
0
Share
Rust 製の ripgrep というツールと正規表現
Yū Kobayashi
October 03, 2020
More Decks by Yū Kobayashi
See All by Yū Kobayashi
Animator As Code As JSON As Model
kb10uy
0
400
Other Decks in Programming
See All in Programming
Don't Prompt Harder, Structure Better
kitasuke
0
800
🦞OpenClaw works with AWS
licux
1
310
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
240
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
110
PHPer、Cloudflare に引っ越す
suguruooki
1
120
Agentic Elixir
whatyouhide
0
430
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
120
tRPCの概要と少しだけパフォーマンス
misoton665
2
250
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
920
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
2
410
Making the RBS Parser Faster
soutaro
0
640
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
180
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
140
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
170
Typedesign – Prime Four
hannesfritz
42
3k
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Docker and Python
trallard
47
3.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Music & Morning Musume
bryan
47
7.2k
So, you think you're a good person
axbom
PRO
2
2k
Transcript
Rust 製の ripgrep という ツールと正規表現 kb10uy / 日下夏稀
自己紹介 • kb10uy (ケイビージュウユーワイ) • おととい内定式に出てきた • ルービックキューブ 40 秒切れるようになっ
てきた • https://kb10uy.org
Ripgrep というツール • grep のすごいやつ • Rust で書かれているので速い • 最初からディレクトリの再帰的検索をサポート
• .gitignore とかを認識して除外してくれる • 速い!! • grep に限らず様々なツールで正規表現が使われている • そのお話をちょっとします
正規表現の実装 • PCRE2 などの正規表現エンジンは従来型NFAと称されている • (数学的には)正規ではない表現も使える • 例: /((.+)¥2){2}/ ……
“つつうらうら”、”かんかんがくがく”など • 一方、POSIX コマンドのデフォルトや ripgrep のデフォルトの 正規表現は DFA で実装されている • 「記憶」が必要な表現は基本的に無理
じゃあ NFA だけでよくない? • そう思うじゃん?でもね…… • 実行時間も消費メモリ量も増える • 特に実行時間が致命的 •
有名な例として /X(.+)+X/ を =XX================= にマッ チさせるとバックトラックが爆発して終わらない
DFA はエコ • DFA の正規表現は計算量が線形 • バックトラック用に記憶しておく必要がないのでメモリにもや さしい • Rust
の regex crate や Golang の regex はスケールした際の最 悪ケースを考慮している(と言われている) • そもそもバックトラックそんな使ってなくない? • 個人差があります • 僕は (*SKIP) とか (*PRUNE) とか好きだよ
SKK の辞書から色々な単語を抽出しよう • 昨日ブログに書いた話 • 実演 • https://kb10uy.hateblo.jp/entry/2020/10/02/131621
まとめ 秘伝の正規表現には 気をつけよう!!