为什么评价为假? " S" == / [S] / => 0

时间:2014-05-28 14:48:43

标签: ruby regex

我是一个红宝石新手,我无法理解为什么"S" == /[S]/评估为false。 有谁能解释一下?我也试过了

"S" =~ /[S]/
#=> 0  `

"S" =~ /[^S]/ 
#=> nil

令我困惑

2 个答案:

答案 0 :(得分:3)

"S" == /[S]/是错误的,因为Ruby中的==没有评估正则表达式是否匹配,它只是确定两个对象是否相等。字符串"S"和正则表达式/[S]/当然是完全不同的对象,并不相等。

=~(这是将正则表达式与Ruby中的字符串匹配的正确方法)返回匹配位置。在第一个示例中,匹配位置是字符串的开头,0。在第二个示例中没有匹配,因此=~返回nil。

答案 1 :(得分:1)

"S" == /[S]/

Ruby中的所有东西(几乎)都是一个对象。在这种情况下,您正在检查字符串"S"的实例与正则表达式/[S]/的实例之间的相等性。因此,根据定义,它们是两个不同的对象,因此表达式返回false。您应该使用==

,而不是检查=~的相等性
"S" == /[S]/

当您使用匹配运算符=~时,它返回在字符串中找到的第一个匹配项的索引。请记住,Ruby中的索引从0开始。在您的示例中,提供的字符串中的第一个字符是匹配的。第一个字符用0索引,这就是语句返回的内容。

"S" == /[^S]/

通过使用插入符号^,您告诉Ruby匹配任何东西,但方括号之间的内容(这仅在方括号中为真,^也用于表示字符串的开头在[]之外使用。在你的情况下,它只是S。 Ruby找不到匹配项并返回nil