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
57
正規表現勉強会(初歩)
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
320
Ruby メモリ管理 プログラミング
megmogmog1965
0
430
Other Decks in Programming
See All in Programming
AIプログラミング雑キャッチアップ
yuheinakasaka
21
5.5k
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
230
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
0
110
TCAを用いたAmebaのリアーキテクチャ
dazy
0
250
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
340
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
21
4.5k
⚪⚪の⚪⚪をSwiftUIで再現す る
u503
0
140
良いコードレビューとは
danimal141
10
9.5k
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
290
運用しながらリアーキテクチャ
nealle
0
240
AWS CDKにおけるL2 Constructの仕組み / aws-cdk-l2-construct
gotok365
3
200
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
850
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
400
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Into the Great Unknown - MozCon
thekraken
35
1.7k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Site-Speed That Sticks
csswizardry
4
420
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Making Projects Easy
brettharned
116
6.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
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