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
正規表現勉強会(初歩)
Search
Yusuke Kawatsu
July 19, 2024
Programming
0
76
正規表現勉強会(初歩)
https://megmogmog1965.github.io/regex_slides/
Yusuke Kawatsu
July 19, 2024
Tweet
Share
More Decks by Yusuke Kawatsu
See All by Yusuke Kawatsu
日付と正規化
megmogmog1965
0
490
Ruby メモリ管理 プログラミング
megmogmog1965
0
710
Other Decks in Programming
See All in Programming
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
160
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
190
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
410
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
220
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
290
これならできる!個人開発のすゝめ
tinykitten
PRO
0
130
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
200
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
200
開発に寄りそう自動テストの実現
goyoki
2
1.5k
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
600
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
870
Become a Pro
speakerdeck
PRO
31
5.7k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
34
Rails Girls Zürich Keynote
gr2m
95
14k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
94k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
Transcript
正規表現勉強会
今日の目的 1. まず正規表現のありがたさを知るべし! 2. ゼロから一緒にハンズオンをしよう!
デモ
はじめに
正規表現とは? 検索 (⌘+F) の進化系のようなものです 置換にも使えます
普通の検索 普通の検索は完全一致。
正規表現で検索 いろんな文字を同時にマッチできます。
置換 一括で置換できます。
準備 VSCode でやります ⌘+F で検索窓を開こう ↓の通りにボタンを押す
記法
完全一致 正規表現でも、普通の検索と同じように完全一致 できます。
完全一致 ワード Script は、2箇所でマッチ。
. → 任意の文字 検索文字 . は、あらゆる1文字にマッチ。 文字 a で置換するとこうなる。 aaaaaaaaaaaaaaaaaaaaaaaaaa
. → 任意の文字 検索ワード ....Script は、JavaScript と TypeScript の両方にマッチ。
^ → 行頭 検索文字 ^ は、行頭にマッチ。 検索ワードが行頭に来たケースのみをマッチで きる。
^ → 行頭 TypeScript は行頭に来てないので ^Type はマッ チしない!
$ → 行末 検索文字 $ は、行末にマッチ。
[…] → どれか1文字 文字 a, b, c にマッチ。
[…] → どれか1文字 無理やり数字にマッチさせるとこう。
[…] → どれか1文字 ハイフンでまとめて指定できます。(小文字)
[…] → どれか1文字 ハイフンでまとめて指定できます。(大文字)
[…] → どれか1文字 ハイフンでまとめて指定できます。(数字)
[^…] → どれでもない1文字 逆に指定した文字のうち どれでもない1文字 に マッチもできます。 ↓例は 数字以外 の文字にマッチ
+ → 繰り返し + 直前の文字の繰り返しにマッチ ↓例は a の後に b が1回以上続くケースにマッ
チ
* → 繰り返し * は + と同じく、直前の文字の繰り返しにマッ チ * は
+ と異なり0回 (ないこと) にもマッチする
* → 繰り返し 文字 a の間に「b が0回ある」という事実にマ ッチしている… ※これが正規表現の理解が難しい所 ↓
(置換) _a_a_a_
(…)+ → ワードの繰り返し グループ (...) を使えば、ワードの繰り返しにもマ ッチできます。
(…|…) → ワードのOR グループ (...|...) を使えば、複数ワードのどれかに マッチできます。
エスケープ
特殊記号はエスケープが必要 前述した特殊記号は abc の様に普通にマッチは できない。 \ を使ってエスケープをすると文字としてマッチ できる。 . →
\. ^ → \^ $ → \$ [ → \[ ] → \] + → \+ * → \* ( → \( ) → \) | → \|
特殊記号はエスケープが必要 それか [...] を使う技もある。 この中では ], - 以外はエススケープが不要。 [.^$+*()|]
置換
普通の置換
普通の置換
奥義! キャプチャグループ! Taro, Hanako, Mike にマッチする正規表現 [A- Za-z]+ が丸括弧で囲まれています
奥義! キャプチャグループ! 置換後の文字列では $1 がそれぞれ Taro, Hanako, Mike に置き換わりました 丸括弧が複数ある場合は順に、
$1, $2, $3 … で参照します
なぜ $1 なのか? \1 は? VSCode は という JavaScript Framework
で作られています → VSCode の正規表現の仕様は Electron JavaScript 標準
先・後読みは説明しないが… 次の様に書いて置換すると、マッチしない行を まとめて消せる ので便利 ^(?!.*残したいワード).*\n
その他、ツール類
HTTPS://REGEX101.COM/
CHATGPT
演習
探す 1. 次のアクセスログからエラーログ (4XX) を正規 表現でマッチさせよう 2. エラーログ (4XX, 5XX)
の両方をマッチさせよう 3. (Want・難) 4XX, 5XX にマッチだけにフィルタ [info] 2023-03-15 10:15:30 - GET /some/path - 200 OK - 123ms [error] 2023-03-20 08:20:15 - GET /no/such/path - 404 Not Foun [error] 2023-03-20 12:00:03 - POST /some/path - 500 Internal S [error] 2023-03-21 23:55:55 - GET /some/path - 401 Anauthorize
消す 末尾の秒数(ms)だけを残して、手前は消してみよ う ↓ (置換) [info] 2023-03-15 10:15:30 - GET
/some/path - 200 OK - 123ms [error] 2023-03-20 08:20:15 - GET /no/such/path - 404 Not Foun [error] 2023-03-20 12:00:03 - POST /some/path - 500 Internal S [error] 2023-03-21 23:55:55 - GET /some/path - 401 Anauthorize 123ms 456ms 111ms 10ms
一部だけ抜き出す 次の文字列はWebアプリケーションのログで す。DockerのJSONログ形式で出力されていま す。 "log" JSONキーが示す値のみを抜き出して見ま しょう。 (json unescape は不要)
↓ (置換) { "log": "[info] 2023-03-15 10:15:30 - GET /some/path - 200 OK { "log": "[error] 2023-03-20 08:20:15 - GET /no/such/path - 40 [info] 2023-03-15 10:15:30 - GET /some/path - 200 OK - 123ms [error] 2023-03-20 08:20:15 - GET /no/such/path - 404 Not Foun
一部だけ抜き出す (前ページからの続きです) CSV形式に整形しましょう。表示順は 日時 → log_level → 本文 の順です。 ↓
(置換) [info] 2023-03-15 10:15:30 - GET /some/path - 200 OK - 123ms [error] 2023-03-20 08:20:15 - GET /no/such/path - 404 Not Foun 2023-03-15 10:15:30,info,GET /some/path - 200 OK - 123ms 2023-03-20 08:20:15,error,GET /no/such/path - 404 Not Found -
END
None