[ruby-list:37658] Re: マッチした部分を配列にしまう方法

From: tsuji.td@...
Date: 2003-05-08 03:10:01 UTC
List: ruby-list #37658
辻(忠)です。

>青木です。
:
>> その1・2とも正規表現が右側にくるように、
>> 
>>  if( line =~ /efct\w\w\w\w\w\w/i)
>> 
>> って形じゃないと問題あるんじゃないでしょうか。
>
>いや、そこは大丈夫です。
>Ruby の =~ は正規表現が左でも動きますから。
:
>ちなみに本当は Ruby では「正規表現が右でも動く」が正解です。
>=~ を実行するのは正規表現オブジェクトなので、正規表現が左に
>来るのが本来の姿なんです。
>
>  a =~ b
>
>は
>
>  a.=~(b)
>
>ということですから。

指摘ありがとうございます。
これは知りませんでした。

1.6では左右共に文字列の際には
右側が自動的に正規表現に変換されるという仕様でしたから
てっきり右が推奨なのかと思っていました。

ちなみに上記の自動変換は1.8では非サポートです。
#1.8では警告が出た覚えがあるんですがいま試してみたら出ませんでした。
#何か規則があるんだろうか・・・?

 1.6系(1.6.8)
p ('1234' =~ '\d+') => 0
p ('\d+' =~ '1234') => nil
p ('1234' =~ /\d+/) => 0
p (/\d+/ =~ '1234') => 0

 1.8系(1.8.0)
p ('1234' =~ '\d+') => nil
p ('\d+' =~ '1234') => nil
p ('1234' =~ /\d+/) => 0
p (/\d+/ =~ '1234') => 0

1.6では単にPerlを意識していただけで、
Ruby的にはあくまでオブジェクトの操作が基本なんですね。

In This Thread