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
38
正規表現勉強会(初歩)
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
220
Ruby メモリ管理 プログラミング
megmogmog1965
0
230
Other Decks in Programming
See All in Programming
What is TDD?
urakawa_jinsei
1
220
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
6
1.6k
Интеграционное тестирование: как приручить хаос
lamodatech
0
560
文化が生産性を作る
jimpei
3
560
4年間変わらなかった YOUTRUSTのアーキテクチャ
daiki1003
1
550
Progressive Web Apps for Rails developers
siaw23
2
540
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
9
800
推しの夫に恋のGPS「ときメーター」#M5Stack #IoT #M5JPTour2024
riyu
0
230
App Router 悲喜交々
quramy
7
380
WEBアプリケーションにおけるAWS Lambdaを用いた大規模な非同期処理の実践
delhi09
PRO
7
4k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
1.2k
Beyond Laravel Octane - Hyperf for Laravel Artisans
albertcht
1
130
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
1
290
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
25
660
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
BBQ
matthewcrist
85
9.2k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
How STYLIGHT went responsive
nonsquared
95
5.1k
The Mythical Team-Month
searls
218
43k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Building Better People: How to give real-time feedback that sticks.
wjessup
362
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
Rails Girls Zürich Keynote
gr2m
93
13k
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