Ruby 正規表現にはいくつかのオプションがあります (例: i
、x
、m
) o
。i
たとえば、大文字と小文字を区別しないことを意味します。
o
オプションの意味は?ではri Regexp
、補間を 1 回だけo
行うという意味です。#{}
しかし、私がこれを行うとき:
a = 'one'
b = /#{a}/
a = 'two'
b
変わらない(そのまま/one/
)。私は何が欠けていますか?
/o
#{...}
特定の正規表現リテラルの置換が、最初に評価されるときに一度だけ実行されるようにします。そうしないと、リテラルが Regexp オブジェクトを生成するたびに置換が実行されます。
この使用例を上げることもできます:
# avoid interpolating patterns like this if the pattern
# isn't going to change:
pattern = ARGV.shift
ARGF.each do |line|
print line if line =~ /#{pattern}/
end
# the above creates a new regex each iteration. Instead,
# use the /o modifier so the regex is compiled only once
pattern = ARGV.shift
ARGF.each do |line|
print line if line =~ /#{pattern}/o
end
したがって、これはむしろコンパイラー、複数回実行される単一行のことだと思います。