PerlerのRuby日記

Rubyとか

=~ による正規表現パターンマッチ

正規表現は、正規表現クラスつまりRegexpクラスから作るか、「/regexp/」のようにスラッシュで囲むかで作れるけれど、まあ後者が簡単。

test_regexp = Regexp.new('^test', true) #=> /^test/i
test_regexp = /^test/i                  #=> /^test/i

マニュアルには左辺に正規表現、右辺に文字列をおいて評価するように書かれているけれど、Perlから入った僕はすごく違和感がある。

なぜならPerlは逆なのだ。

Ruby

str = 'test is important.'
test_regexp =~ str      #=> 0(マッチした位置)

マッチしなければnil。

Perl

$test_regexp = qr/^test/i;
$str = 'test is important.';
$str =~ $test_regexp;    #=> 1(成功した回数)

と、いろいろ調べてたら逆でも問題ないらしい。

str =~ test_regexp  #=> 0

おお。

Perlerな自分は断然こちらが好きだが、流儀的にはどうなのだろう。

まだよくわからない。


要するにこれはあれか、シンタックスシュガーというやつなんでしょうね。