正規表現を勉強する
目次
正規表現は面白い
正規表現を制するものは世界を制す。
リカルドはこれでチャンピオンになった。
は?
いや、結構言い得て妙だとは思うのだよ。
正規表現を知っていたら結構人生楽しくなるはず。
てことで、正規表現の練習をしていくきゃーのきゃーの。
ここでは正規表現の勉強なのでgrepをパイプで多段にするとかはご法度とする。
えくささーいずわーんぬっ(=Exercise 1)
りぴーとあふたーみー
とまぇーーーーーーん こ
ぐっ!
以下の州の一覧の中からAから始まる州名を検索せよ
statelist.txt
Alabama |
A1
めっちゃかんたんやん。
$ grep "^A" statelist.txt |
すてきやん
どぅえくささいずとぅーんぐっ(=Exercise 2)
では、6文字の州を検索せよ。
A2
こんな感じ。
$ grep "^......$" statelist.txt |
これだとあまりにもかっこわるい
こんなのはどう?
$ grep -P "^.{6}$" statelist.txt |
州名のことをわかっている前提でいえば\wでもよいかも。
でも今後My BroとかC’mon!とかそういった州名が増えたら対応できないから
$ grep -P "^[\w\W]{6}$" statelist.txt |
これで良いと思う。
ばらっえくささいずぅういんぐりーっちゃすりー(=Exercise 3)
さらに、このリストから名前の中にnが2回だけ使われている州を検索せよ。
A3
こんな感じかな。
$ grep -P "[Nn][\w\W]*[Nn]" statelist.txt |
あー、これだとnが2個以上ヒットしちゃうか。
$ grep -Pi "^[^n]*[n][^n]*[n][^n]*$" statelist.txt |
今回見やすさを重視してignorecaseオプションを付けた。
で、さらに同じ項で括れそうだ。
$ grep -Pi "^([^n]*[n]){2}[^n]*$" statelist.txt |
んでぃえくささいずふおーんぬぅ(=Exercise 4)
次に、「文字列1+スペース+文字列2」となっている州を検索せよ。
ただし文字列1からはNewという文字列を省くこと。
A4
Newを抜くにはどうしたらよいか。ここがポイントかな。
$ grep -P '^(?!New)\S*\s\S*$' statelist.txt |
これでNew JerseyとかNew Yorkは省かれるし、仮に今後My BroやC’mon Everybody!って州が現れてもヒットすると思うし、逆にSamuel L JacksonとかMerry Christmas Mr Lawrenceという州が現れた場合も検索はされないと思う。
最後に
こうやって記事にするために実際にいろいろ勉強をした。
AIやビッグデータとか世の中の流行りの技術もいいけど、基礎中の基礎である正規表現を知っていると今後さらに面白くなると思う。