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
正規表現 / RegExp_2021
Search
Cybozu
PRO
June 02, 2021
Technology
12k
3
Share
正規表現 / RegExp_2021
Cybozu
PRO
June 02, 2021
More Decks by Cybozu
See All by Cybozu
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
38
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
78k
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
220
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
560
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.1k
LLMアプリの品質保証
cybozuinsideout
PRO
1
480
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
210
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
170
つけまが降ってきた日
cybozuinsideout
PRO
1
650
Other Decks in Technology
See All in Technology
🀄️ on swiftc
giginet
PRO
0
290
Databricksで構築するログ検索基盤とアーキテクチャ設計
cscengineer
0
130
NgRx SignalStore: The Power of Extensibility
rainerhahnekamp
0
190
DevOpsDays2026 Tokyo Cross-border practices to connect "safety" and "DX" in healthcare
hokkai7go
0
110
推し活エージェント
yuntan_t
1
900
バックオフィスPJのPjMをコーポレートITが担うとうまくいく3つの理由
yueda256
1
300
Discordでリモートポケカしてたら、なぜかDOを25分間動かせるようになった話
umireon
0
110
Kubernetes基盤における開発者体験 とセキュリティの両⽴ / Balancing developer experience and security in a Kubernetes-based environment
chmikata
0
220
"まず試す"ためのDatabricks Apps活用法 / Databricks Apps for Early Experiments and Validation
nttcom
1
230
デシリアライゼーションを理解する / Inside Deserialization
tomzoh
0
230
AgentCore RuntimeからS3 Filesをマウントしてみる
har1101
3
390
Hello UUID
mimifuwacc
0
130
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.4k
Typedesign – Prime Four
hannesfritz
42
3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
410
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
120
4 Signs Your Business is Dying
shpigford
187
22k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
430
[SF Ruby Conf 2025] Rails X
palkan
2
930
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
The SEO Collaboration Effect
kristinabergwall1
0
420
Transcript
正規表現 サイボウズ株式会社
名前とは︖ ▌全てをリストアップしようとしたら 切りがない ▌「何でも良い」というわけにもい かない ▌(なるべく)全てを表現するパ ターンを使う
正規表現の利⽤例 ▌バリデーション n ⼊⼒された⽂字列が期待通りの形式か n 例)メールアドレス欄に電話番号を⼊⼒していないか ▌抽出 n ⼤量のテキストデータから参照したい部分だけを抽出する n
例)アクセスログからIPアドレスだけを抽出するとか
基本な正規表現: ⽂字列 ▌連続する⽂字列 n 例)cybozu n cybozu.com n hoge.cybozu.com n
hoge.cybozu-dev.com
基本な正規表現: 選択・グループ ▌| 区切りでどれかにマッチさせる ▌() で選択範囲を限定する n 例)com|cn n cybozu.com
n cybozu.cn n (cybozu|kintone).com n cybozu.com n kintone.com n cybozu1com ←あれ︖
基本な正規表現 ▌. 1⽂字(何でも良い) ▌¥ ¥の次の特別⽂字をそのまま使う n 例)(cybozu|kintone)¥.com ▌[ab] ⽂字クラス。[]の中の1⽂字をマッチする ▌[^ab]
否定⽂字クラス。[]の中が含まれなかったらマッチする ▌[a-z] aからzまでの⽂字クラス
特別クラス ▌¥d 数字 →[0-9] ▌¥D ⾮数字 →[^0-9] ▌¥w ⽂字(数字を含む) →[a-zA-Z0-9_]
▌¥W ⾮⽂字 →[^a-zA-Z0-9_]
基本な正規表現: 繰り返し ▌? 0-1回繰り返しマッチする ▌+ 1回以上繰り返しマッチする ▌* 0回以上繰り返しマッチする ▌{min, max}
min回以上、max回以下 n 例).+¥.cybozu(-dev)?.com n ocean.cybozu-dev.com n hoge.cybozu.com n example.com/www.cybozu.com ←あれ︖
名前とは︖ ▌[A-Z][a-z]* ▌本当︖ ▌「Taro Jr.」 は︖ ▌正規表現って難しい
基本な正規表現:先頭と末尾 ▌^ ⾏の先頭にマッチ ▌$ ⾏の末尾にマッチ ▌^hoge.[a-z].com$ n hoge.cybozu.com n hoge.hoge.com
n nothoge.cybozu.com
後⽅参照 ▌¥1, ¥2, ¥n n番⽬の()内のマッチしたものと同じ⽂字列 ▌<(div|p)>.*<¥/¥1> n <div>hoge</div> n <p>hoge</p>
後⽅参照(2) ▌(?:hoge) マッチはするが、¥1には⼊らない ▌(?<name>hoge)(?P=name) 名前付き後⽅参照グループ
メールアドレスとは︖ ▌ (?:[a-z0-9!#$%&'*+¥/=?^_`{|}~-]+(?:¥.[a- z0-9!#$%&'*+¥/=?^_`{|}~-]+)*|"(?:[¥x01- ¥x08¥x0b¥x0c¥x0e-¥x1f¥x21¥x23- ¥x5b¥x5d-¥x7f]|¥¥[¥x01- ¥x09¥x0b¥x0c¥x0e-¥x7f])*")@(?:(?:[a- z0-9](?:[a-z0-9-]*[a-z0-9])?¥.)+[a-z0- 9](?:[a-z0-9-]*[a-z0-9])?|¥[(?:(?:(2(5[0- 5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-
9]))¥.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0- 9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0- 9]:(?:[¥x01-¥x08¥x0b¥x0c¥x0e-¥x1f¥x21- ¥x5a¥x53-¥x7f]|¥¥[¥x01- ¥x09¥x0b¥x0c¥x0e-¥x7f])+)¥]) ▌ 正規表現って難しい
ツール紹介 業務で恐らく使う事になる場⾯
awk ▌テキスト抽出⽤のプログラミング⾔語・コマンドラインツール ▌Aho, Weinberger, Kernighan ▌正規表現も使える ▌例)ip a s |
awk '/inet/{print $2}' n ip a s の結果に「inet」の含んだ⾏だけに対して2列⽬を抽出する
sed ▌Stream editor ▌ファイルを読み上げて書き換えられる ▌例) sed -i 's/2018/2021/g' kaiun.md ▌今年の資料を作るなら
sed -i 's/2019/2021/g' kaiun.md n kaiun.mdというファイルの中⾝から「2019」という⽂字を全て「2021」に する
grep ▌globally search a regular expression and print ▌全⽂検索してマッチした正規表現をプリントする ▌例)
grep -P "¥d+¥.¥d+¥.¥d+¥.¥d+" /var/log/nginx/error.log n nginxのエラーログからIPアドレスを表⽰する
git-grep ▌https://git-scm.com/docs/git-grep ▌gitレポにあるファイルをgrepする ▌例) git grep -B1 -E "IN¥W+SPF"
普段使っているツールにも ▌CLIでless等を使う場合、結果から正規表現で絞り込む事ができる ▌VSCodeの検索機能には正規表現を使った検索もできる ▌勿論プログラミング⾔語にも n https://github.com/cybozu-go/neco/blob/master/pkg/git- neco/cmd/github.go#L63 n https://github.com/kintone/kintone- cli/blob/master/src/utils/string.ts
お勧め ▌http://shop.oreilly.com/product/9780596003524.do ▌https://blog.cybozu.io/entry/8757 ▌https://regexcrossword.com/ ▌https://regex101.com/
演習 ▌https://regexcrossword.com/ で遊ぶ ▌↓の出⼒からHTTPヘッダーを抽出する n curl -v https://hoge.cybozu-dev.com