読者です 読者をやめる 読者になる 読者になる

『たのしいRuby第3版』第23章HTTPサーバのアクセスログ解析

正規表現を頑張って覚えよう。

HTTPサーバのアクセスログから情報を取得する際、
\Sと\s(S大文字とs小文字)の違いが分からなかった。
逆引きしても駄目なので、テストしてみると以下の通り。

>> /(\S+)/ =~ "192.168.1.1"
=> 0
>> $1
=> "192.168.1.1"
>> /(\S+)/ =~ "192.168.1.1 "
=> 0
>> $1
=> "192.168.1.1"
>> /(\s+)/ =~ "192.168.1.1"
=> nil
>> /(\s+)/ =~ "192.168.1.1 "
=> 11
>> $1
=> " "
>> $2
=> nil
>> $'
=> ""
>> $&
=> " "
>> $`
=> "192.168.1.1"

大文字のSの方は、空白を無視した文字列を探索し、
小文字のsの方は、空白を探索する。
なお、()で括ることでキャプチャすることが可能。
キャプチャした結果が$1等に入るので、その値もテストしてみた。
このような結果が帰ってくるのか。

※追記
[]で括られた文字から文字だけを取る場合等、下記のような
書き方をすれば、取れるようだ。覚えておこう。
//の間に、\[ 〜 \]で括ればいいのか。
$$で括られている場合、//の間に、\$ 〜 \$で括ればいいのか。

>> /\[([^\]]+)\]/ =~ "[14/Jan/2010:02:16:10 +0900]"
=> 0
>> $1
=> "14/Jan/2010:02:16:10 +0900"

>> /([^\]]+)/ =~ "[14/Jan/2010:02:16:10 +0900]"
=> 0
>> $1
=> "[14/Jan/2010:02:16:10 +0900"

>> /\$([^\$]+)\$/ =~ "$14/Jan/2010:02:16:10 +0900$"
=> 0
>> $1
=> "14/Jan/2010:02:16:10 +0900"