使用method sub转换var类型的字符串' $'

时间:2014-10-30 18:09:46

标签: ruby

我正在修改字符串,如下所示:

"one hundred forty-four".sub(/(\w+)(\s)([a-z\-]+)$/){$2 =  "test"}

say.rb:78: Can't set variable $2

我该怎么做?

编辑:one hundredtestforty-four是我想要的。

2 个答案:

答案 0 :(得分:2)

不允许。它是一个只读全局变量。

使用另一个全局变量名称可以正常工作。

当然,使用全局变量会引起对程序其他部分的破坏。

答案 1 :(得分:0)

我相信你想要:

"one hundred forty-four".sub(/\s+([a-z-]+)$/, 'test\1')
  #=> "one hundredtestforty-four"

"one hundred forty-four".sub(/\s+([a-z-]+)$/, "test\\1")
  #=> "one hundredtestforty-four"

"one hundred forty-four".sub(/\s+([a-z-]+)$/, "test"+$1)
  #=> "one hundredtestforty-four"

"one hundred forty-four".sub(/\s+([a-z-]+)$/, "test#{$1}")
  #=> "one hundredtestforty-four"

正则表达式查找以一个或多个空格开头的字符串,然后查找任意数量的小写字母或超标,然后是行尾。 (注意,在字符类中不会对hypen进行转义,并且必须在类中首先出现或最后出现)。因此,它与" forty-four"匹配,捕获组1包含"forty-four"。因此," forty-four"已替换为"testforty-four"。请注意,如果字符串使用单引号编写,\1如果使用双引号,则通过编写\\1来检索捕获组1的内容。或者,您可以使用显示的两种方式之一来使用全局变量。

请注意,如果需要,您可以使用$1在后​​续语句中引用捕获组1的内容。