『たのしい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"