我是一个红宝石新手,我无法理解为什么"S" == /[S]/
评估为false
。
有谁能解释一下?我也试过了
"S" =~ /[S]/
#=> 0 `
"S" =~ /[^S]/
#=> nil
令我困惑
答案 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
。