第8章 正規表現の詳細 練習問題 その2

昨日の続き。もっかい問題を引用すると、

/"([^"]*)"/            #1
/^0?[0-3]?[0-7]{1,2}$/ #2
/^\b[\w.]{1,12}\b$/    #3

ですね。#1は昨日やったので、#2から。

この正規表現にマッチする文字列を数値としてみて、一番大きいのは377。[0-7]あたりから8進数の匂いがぷんぷんするので、377を8進数として10進数の数字に直すと255になります。はじめの0?は8進数を表すお約束であってもなくても良い。ということで、これは0から255までを表す8進数に文字列がちょうどマッチするような正規表現ということがわかりました。

#3は実は答え見ちゃったんですが、すごく単純に[\w.]、ワードを構成する文字とドットが1回以上12回以下繰り返しているような文字列にマッチするという意味で良いみたい。しかし、はじめとおしりのの\bが付いてるのを忘れないように。これが実はすてきで、例えば、

.txt
test.
..

みたいな文字列は、文字列全体としてはマッチしない。.txtという文字列の一つ目の\b区切りの位置はドットのすぐ後ろにあたる。だから、.txtという文字列はマッチしない。これはファイル名が妥当か確認するような時に用いられる。よくできてるね。というわけで、練習問題2終わり。

詳説 正規表現 第2版

詳説 正規表現 第2版