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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
73k
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
140
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
670
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
81
つけまが降ってきた日
cybozuinsideout
PRO
1
510
「行ってよかった!」をみんなに広げる
cybozuinsideout
PRO
0
170
サイボウズの QAエンジニアについて / about cybozu QA
cybozuinsideout
PRO
3
4.4k
不具合の先にある面白さ~配属3か月目の新卒QAのいま~
cybozuinsideout
PRO
0
460
kintone開発チームの紹介
cybozuinsideout
PRO
1
87k
Other Decks in Technology
See All in Technology
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.9k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
300
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
350
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
450
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
110
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
150
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
280
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
270
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
Odyssey Design
rkendrick25
PRO
1
490
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
A Tale of Four Properties
chriscoyier
162
24k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
340
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
140
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Mobile First: as difficult as doing things right
swwweet
225
10k
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