Ruby regexp 有一些选项(例如i
, x
, m
, o
)。i
例如,表示忽略大小写。
选项是什么o
意思?在ri Regexp
中,它表示只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
所以我想这对于编译器来说是一件相当重要的事情,对于被执行多次的单行。