正規表現の利⽤例
▌バリデーション
n ⼊⼒された⽂字列が期待通りの形式か
n 例)メールアドレス欄に電話番号を⼊⼒していないか
▌抽出
n ⼤量のテキストデータから参照したい部分だけを抽出する
n 例)アクセスログからIPアドレスだけを抽出するとか
Slide 4
Slide 4 text
基本な正規表現: ⽂字列
▌連続する⽂字列
n 例)cybozu
n cybozu.com
n hoge.cybozu.com
n hoge.cybozu-dev.com
Slide 5
Slide 5 text
基本な正規表現: 選択・グループ
▌| 区切りでどれかにマッチさせる
▌() で選択範囲を限定する
n 例)com|cn
n cybozu.com
n cybozu.cn
n (cybozu|kintone).com
n cybozu.com
n kintone.com
n cybozu1com ←あれ︖
基本な正規表現: 繰り返し
▌? 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 ←あれ︖
Slide 9
Slide 9 text
名前とは︖
▌[A-Z][a-z]*
▌本当︖
▌「Taro Jr.」 は︖
▌正規表現って難しい
Slide 10
Slide 10 text
基本な正規表現:先頭と末尾
▌^ ⾏の先頭にマッチ
▌$ ⾏の末尾にマッチ
▌^hoge.[a-z].com$
n hoge.cybozu.com
n hoge.hoge.com
n nothoge.cybozu.com
Slide 11
Slide 11 text
後⽅参照
▌¥1, ¥2, ¥n n番⽬の()内のマッチしたものと同じ⽂字列
▌<(div|p)>.*<¥/¥1>
n
awk
▌テキスト抽出⽤のプログラミング⾔語・コマンドラインツール
▌Aho, Weinberger, Kernighan
▌正規表現も使える
▌例)ip a s | awk '/inet/{print $2}'
n ip a s の結果に「inet」の含んだ⾏だけに対して2列⽬を抽出する
Slide 16
Slide 16 text
sed
▌Stream editor
▌ファイルを読み上げて書き換えられる
▌例) sed -i 's/2018/2021/g' kaiun.md
▌今年の資料を作るなら sed -i 's/2019/2021/g' kaiun.md
n kaiun.mdというファイルの中⾝から「2019」という⽂字を全て「2021」に
する
Slide 17
Slide 17 text
grep
▌globally search a regular expression and print
▌全⽂検索してマッチした正規表現をプリントする
▌例) grep -P "¥d+¥.¥d+¥.¥d+¥.¥d+" /var/log/nginx/error.log
n nginxのエラーログからIPアドレスを表⽰する
普段使っているツールにも
▌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