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
3
12k
正規表現 / RegExp_2021
Cybozu
PRO
June 02, 2021
Tweet
Share
More Decks by Cybozu
See All by Cybozu
kintone開発チームの紹介
cybozuinsideout
PRO
0
74k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
55
AIツール開発ワークショップ(Dify)【サイボウズ新人研修2025】
cybozuinsideout
PRO
20
22k
モバイル【サイボウズ新人研修2025】
cybozuinsideout
PRO
3
3.7k
Git/GitHub を使う上で知っておくと嬉しいかも Tips【サイボウズ新人研修2025】
cybozuinsideout
PRO
14
10k
GitHub Copilot活用【サイボウズ新人研修2025】
cybozuinsideout
PRO
15
14k
ソフトウェアライセンス【サイボウズ新人研修2025】
cybozuinsideout
PRO
13
8.2k
エンジニアのためのアウトプット講座 〜知識をシェアするはじめの一歩〜【サイボウズ新人研修2025】
cybozuinsideout
PRO
7
4.6k
Docker入門【サイボウズ新人研修2025】
cybozuinsideout
PRO
13
12k
Other Decks in Technology
See All in Technology
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
3
230
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
6
730
ガチな登山用デバイスからこんにちは
halka
1
230
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
310
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
440
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
380
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
400
フィンテック養成勉強会#56
finengine
0
140
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
200
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.2k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.7k
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
150
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
Agile that works and the tools we love
rasmusluckow
330
21k
The Invisible Side of Design
smashingmag
301
51k
Being A Developer After 40
akosma
90
590k
Code Reviewing Like a Champion
maltzj
525
40k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Bash Introduction
62gerente
615
210k
Thoughts on Productivity
jonyablonski
70
4.8k
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