当前位置:  开发笔记 > 后端 > 正文

Ruby中$ 1和\ 1

如何解决《Ruby中$1和\1》经验,为你挑选了2个好方法。

在Ruby中使用正则表达式时,$ 1和\ 1之间有什么区别?



1> Avdi..:

\ 1是反向引用,它只能在相同subgsub方法调用中工作,例如:

"foobar".sub(/foo(.*)/, '\1\1') # => "barbar"

$ 1是一个全局变量,可以在以后的代码中使用:

if "foobar" =~ /foo(.*)/ then 
  puts "The matching word was #{$1}"
end

输出:

"The matching word was bar"
# => nil



2> Brian Carper..:

请记住,有第三种选择,块形式sub.有时你需要它.假设您要使用该文本的反向替换某些文本.你不能使用$ 1,因为它没有足够快地绑定:

"foobar".sub(/(.*)/, $1.reverse)  # WRONG: either uses a PREVIOUS value of $1, 
                                  # or gives an error if $1 is unbound

您也无法使用\1,因为该sub方法只是\1使用适当的捕获文本进行简单的文本替换,这里没有任何魔术:

"foobar".sub(/(.*)/, '\1'.reverse) # WRONG: returns '1\'

因此,如果你想做任何花哨的事情,你应该使用块形式sub($ 1,$ 2,$`,$'等可用):

"foobar".sub(/.*/){|m| m.reverse} # => returns 'raboof'
"foobar".sub(/(...)(...)/){$1.reverse + $2.reverse} # => returns 'oofrab'

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有