Avd*_*vdi 81
\ 1是反向引用,它只能在相同sub或gsub方法调用中工作,例如:
"foobar".sub(/foo(.*)/, '\1\1') # => "barbar"
Run Code Online (Sandbox Code Playgroud)
$ 1是一个全局变量,可以在以后的代码中使用:
if "foobar" =~ /foo(.*)/ then
puts "The matching word was #{$1}"
end
Run Code Online (Sandbox Code Playgroud)
输出:
"The matching word was bar"
# => nil
Run Code Online (Sandbox Code Playgroud)
Bri*_*per 29
请记住,有第三种选择,块形式sub.有时你需要它.假设您要使用该文本的反向替换某些文本.你不能使用$ 1,因为它没有足够快地绑定:
"foobar".sub(/(.*)/, $1.reverse) # WRONG: either uses a PREVIOUS value of $1,
# or gives an error if $1 is unbound
Run Code Online (Sandbox Code Playgroud)
您也无法使用\1,因为该sub方法只是\1使用适当的捕获文本进行简单的文本替换,这里没有任何魔术:
"foobar".sub(/(.*)/, '\1'.reverse) # WRONG: returns '1\'
Run Code Online (Sandbox Code Playgroud)
因此,如果你想做任何花哨的事情,你应该使用块形式sub($ 1,$ 2,$`,$'等可用):
"foobar".sub(/.*/){|m| m.reverse} # => returns 'raboof'
"foobar".sub(/(...)(...)/){$1.reverse + $2.reverse} # => returns 'oofrab'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23736 次 |
| 最近记录: |