14

Ruby regexp 有一些选项(例如i, x, m, o)。i例如,表示忽略大小写。

选项是什么o意思?在ri Regexp中,它表示只o执行#{}一次插值。但是当我这样做时:

a = 'one'  
b = /#{a}/  
a = 'two'  

b不会改变(它保持不变/one/)。我错过了什么?

4

1 回答 1

21

直接来自正则表达式的首选源

/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

所以我想这对于编译器来说是一件相当重要的事情,对于被执行多次的单行。

于 2012-11-11T19:53:27.327 回答