什么是Ruby编号的全局变量

值$ 1,$ 2,$’,$`在Ruby中意味着什么?

它们是从最近的模式匹配中捕获的(就像在Perl中一样; Ruby最初从Perl中提取了很多语法,尽管它现在已经基本上得到了它:)。 $1$2等等是指正则表达式中括号内的捕获:给定/a(.)b(.)c/ , $1将是ab之间的字符,而bc之间的字符是$2$`$'表示匹配整个正则表达式(它本身在$& )的字符串之前和之后的字符串。

实际上,只有在历史上,这些才有意义; 您可以在perldoc perlvar找到它,它通常可以很好地记录Perl变量的预期助记符和历史记录,并且大多数仍然适用于Ruby中的全局变量。 编号的捕获是捕获反向引用正则表达式语法( \1\2等)的替代; Perl在3.x版本中从前者切换到后者,因为在正则表达式之外使用反向引用语法过于复杂。 (在Perl 5推出时,解析器已被充分重写,语法再次可用,并立即重用于引用/“指针”.Ruby选择使用名称引用:相反,它更接近于Lisp和Smalltalk样式;因为Ruby最初是与Pert-like相似的Smalltalk风格的OO,这在语言上更有意义。)同样适用于$& ,在历史正则表达式语法中简单& (但你不能在外面使用它替换替换的一部分,所以它变成了变量$&而不是)。 $`$'都是“cutesy”:来自匹配字符串的“back-quote”和“forward-quote”。

这里列出了未编号的编号:

http://www.zenspider.com/Languages/Ruby/QuickRef.html#19

$1, $2 ... $N指的是正则表达式捕获组中的匹配项。

所以:

 "ab:cd" =~ /([az]+):([az]+)/ 

会产量

 $1 = "ab" $2 = "cd"