1

Regex#to_sパターンでオプションを無効にする方法を確認するために遊んでいました%r/../。しかし、そのような出力と混同されますRegex#to_s

irb(main):005:0> %r/ab+c/x.to_s
=> "(?x-mi:ab+c)"   #why here -m option has been disabled?

irb(main):006:0> %r/ab+c/i.to_s
=> "(?i-mx:ab+c)"   #why here -m option has been disabled?

irb(main):007:0> %r/ab+c/m.to_s
=> "(?m-ix:ab+c)"   #why here -i option has been disabled?

irb(main):008:0> %r/ab+c/o.to_s
=> "(?-mix:ab+c)"   #why here o option not get into the (...) as the above?

irb(main):009:0> %r/ab+c/.to_s
=> "(?-mix:ab+c)"   #why always m,i,x option get into the (...) as the above?

オプションがオン/オフするベースのロジックを理解するために、誰かがここで私を助けてくれますか?

Regex#hashおよびRegex#quoteメソッドはRuby1.9.3でどのように機能しますか(同じことを理解するための小さなコード)?

4

1 に答える 1

2

あなたの理解は逆転していると思います。ダッシュの左側のオプションはオンで、ダッシュの右側のオプションはオフです。

/ab+c/x => "x-mi"
/ab+c/i => "i-mx"
/ab+c/m => "m-ix"

3つのオプションはそれぞれ各正規表現文字列に表示されますが、ダッシュの左側または右側にあることは、オプションがオンかオフかを示します。

2番目の質問に関してRegexp#hashは、特定の正規表現に対して同じFixnumを生成するメソッドです。これにより、効果的な同等性について2つの異なる正規表現オプションを比較できます。詳細については、 Object#hashを参照してください。

于 2013-01-19T14:13:00.090 に答える