在Ruby中使用正则表达式时,$ 1和\ 1之间有什么区别?
46
A
回答
78
\ 1是反向引用,这将仅在同一sub
或gsub
方法调用工作,例如:
"foobar".sub(/foo(.*)/, '\1\1') # => "barbar"
$ 1是一个全局变量,其可以在以后的代码被用于:
if "foobar" =~ /foo(.*)/ then
puts "The matching word was #{$1}"
end
输出:
"The matching word was bar"
# => nil
29
请记住,还有第三个选项,b锁形式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'
相关问题
- 1. Ruby TinyInt(1)?
- 2. Ruby String.index(“/”)return -1
- 3. Ruby:将字符串中的所有整数加1 +1
- 4. ruby中a = 1,b = 2和a = 1(换行符)b = 2之间的差异
- 5. javascript中的[1] [1]和[1] [0]的结果
- 6. Haskell中[1 .. 0]与[1 .. -1]的区别和原因?
- 7. 如何在1:1和1:M关系的sqlite中创建表?
- 8. 在Ruby中,为什么nil [1] = 1评估为零?
- 9. Simulink中:能够形成-1和+1
- 10. SQLBulkCopy和日期(1/1/1753)
- 11. 为什么(1 + 1)和1返回1而不是2?
- 12. 实体框架和(1到很多) - (多对1)(1 - * * - 1)关系
- 13. (1)的ToString()和1.toString()内的Javascript
- 14. “其中1 = 1” 的语句
- 15. 1 + 1/2 + 1/3 + - + 1/n =?
- 16. Is!0和!1比1和0好吗?
- 17. 的冲突关系和外键1-1
- 18. 1和'1'之间的PHP差异
- 19. 如何 “(1..4).inject(:+)” 在Ruby中
- 20. 在Ruby中,12个月!= 1.year
- 21. ruby中的string.split(“,”,-1)和string.split(“,”, - 4)有什么区别?
- 22. Ruby on Rails中1对多关系上has_one和belongs_to的区别
- 23. 'mod'和haskell中的-1
- 24. 如何生成具有值1/1/11的轴1/1/12 1/1/13
- 25. 在Ruby中,为什么Hash [:a,1]和Hash [[[a,1]]]给出了相同的结果{:a => 1},而Hash [[:a,1]]给出了一个空哈希?
- 26. 比较1的NSArray和1 NSSet中的副本计数在此
- 27. MongoDB中的db.runCommand({getlasterror:1,fsync:true})和db.runCommand({getlasterror:1})之间的区别?
- 28. gsub的ruby eval('\ 1')可能吗?
- 29. JoshCheek的ruby-kickstart挑战1第2场
- 30. JPA I:N和1:1使用连接表
请注意,尝试使用反向引用时,[Ruby对单引号和双引号的处理](http://stackoverflow.com/a/3028799/303896)可能会妨碍您的工作。 – alxndr 2016-05-13 22:29:24
了解不多,有人可以提供一些更多解释 – YasirAzgar 2017-04-25 07:28:23