69576


<https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html>

^ 上記、 ruby の正規表現についてのドキュメントを読んでいました。ここで、

> /pat/o パターン内の #{} の展開を1回限りしかしない。

という記述があることに気がつきました。

# 質問

ruby の正規表現で `/pat/o` と記述を行った時に、このフラグの仕様はどのようなものになりますか? つまり、これを素直に捉えると、 `o`
のフラグがなければ、 `#{}` の interpolation (文字列の中の式展開) は再帰的に何回でも可能である、と理解されるのですが、

  1. この仕様についての理解は自分は正しいでしょうか?
  2. 仮にそうであったとして、おそらく1回に式展開を制限するのは、予想外の動作を防ぐためであると理解ができますが、逆に、再帰的な interpolation を積極的に行いたくなる usecase がちょっと自分には想像ついておらず、これがデフォルトの動作になっている意図が理解できていないです。どのような場合に、再帰的な式展開を行いたくなるものなのでしょうか?


CC BY-SA 4.0
2020-08-15T08:06:57.863
69575
2020-08-15T11:58:14.600
2020-08-15T11:58:14.600
3060
754
question
ruby 正規表現
ruby の regexp において、 /pat/o の機能の仕様とその意図が分からない


`/o` フラグは再帰するかどうかではなくて、正規表現のリテラル表記を評価する度に展開するかどうか（新しい正規表現オブジェクトを作るかどうか）です。

[code]

    3.times do |i|
      re1 = /#{i}/
      re2 = /#{i}/o
      p [re1, re2]
    end
    
[/code]

出力

[code]

    [/0/, /0/]
    [/1/, /0/]
    [/2/, /0/]
    
[/code]


CC BY-SA 4.0
2020-08-15T08:30:08.110
69576
2020-08-15T08:30:08.110
3249
69575
answer