我正在修改字符串,如下所示:
"one hundred forty-four".sub(/(\w+)(\s)([a-z\-]+)$/){$2 = "test"}
say.rb:78: Can't set variable $2
我该怎么做?
编辑:one hundredtestforty-four
是我想要的。
答案 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的内容。