Ruby 为什么这个值是假的&引用;S";==/[S] /=>;0

Ruby 为什么这个值是假的&引用;S";==/[S] /=>;0,ruby,regex,Ruby,Regex,我是一个ruby新手,我很难理解为什么“S”==/[S]/的计算结果为false。 有人能解释一下吗?我也试过了 "S" =~ /[S]/ #=> 0 ` "S" =~ /[^S]/ #=> nil 令我困惑的是,Ruby中的“S”==/[S]/是错误的,因为Ruby中的==不计算regexp是否匹配,它只确定两个对象是否相等。字符串“S”和regexp/[S]/当然是完全不同的对象,并不相等 =~(这是在Ruby中将regexp与字符串匹配的正确方法)返回匹配位置。在第一个

我是一个ruby新手,我很难理解为什么
“S”==/[S]/
的计算结果为
false
。 有人能解释一下吗?我也试过了

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

"S" =~ /[^S]/ 
#=> nil
令我困惑的是,Ruby中的“S”==/[S]/是错误的,因为Ruby中的
==
不计算regexp是否匹配,它只确定两个对象是否相等。字符串
“S”
和regexp
/[S]/
当然是完全不同的对象,并不相等

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

“S”==/[S]/
为false,因为Ruby中的
==
不计算regexp是否匹配,它只确定两个对象是否相等。字符串
“S”
和regexp
/[S]/
当然是完全不同的对象,并不相等

"S" == /[S]/
=~
(这是在Ruby中将regexp与字符串匹配的正确方法)返回匹配位置。在第一个示例中,匹配位置是字符串0的开头。在第二个示例中,没有匹配项,因此
=~
返回nil

"S" == /[S]/
Ruby中的一切(几乎)都是对象。在本例中,您正在检查字符串
“S”
的实例与Regexp
/[S]/
的实例之间是否相等。因此,根据定义,它们是两个不同的对象,因此表达式返回false。您应该使用
=~

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

"S" == /[^S]/
通过使用插入符号
^
您告诉Ruby匹配除方括号之间的内容以外的任何内容(这仅在方括号中是正确的,
^
如果在
[]
之外使用,也用于指示字符串的开头)。在您的情况下,它不是
S
。Ruby没有找到匹配项并返回
nil

Ruby中的一切(几乎)都是对象。在本例中,您正在检查字符串
“S”
的实例与Regexp
/[S]/
的实例之间是否相等。因此,根据定义,它们是两个不同的对象,因此表达式返回false。您应该使用
=~

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

"S" == /[^S]/

通过使用插入符号
^
您告诉Ruby匹配除方括号之间的内容以外的任何内容(这仅在方括号中是正确的,
^
如果在
[]
之外使用,也用于指示字符串的开头)。在您的情况下,它不是
S
。Ruby没有找到匹配项并返回
nil

,因为
'S'
String
)不等于
/[S]/
Regexp
)。
0
在Ruby中不是错误的。旁注:请记住,在Ruby中,“0”的整数表示逻辑上的“真”,因此
“S”=~/[S]/=>0
并不表示错误。这是真的<代码>如果(0)运行代码
if(nil)
if(false)
。@quetzalcatl
/[^S]/
-表示除S以外的任何东西。@Broisasze:对,我写得太快了,谢谢:)因为
'S'
字符串
)不等于
//code>(
Regexp
)。
0
在ruby中没有错误。旁注:记住在ruby中(与C中不同,“0”的整数表示逻辑上的“真”,因此
“S”=~/[S]/=>0
并不表示假。它表示真。
if(0)
运行代码。
if(nil)
if(FALSE)
不表示假。@quetzalcatl
/[^S]/
-表示除S之外的任何东西。@BroiSatse:对,我写得太快了,谢谢:)我怎么才能得到“S”=~/[S]/#=>0是否返回true?我还认为“^character”意味着开始character0是Ruby所称的“truthy”——它在条件句等中被视为true。如果您真的需要将其转换为布尔真,请执行
!!(“S”=~/[S]/)
。关于^,在regexp的开头表示匹配字符串的开头,但在[]内表示“不是下面的字符”。如何让“S”=~/[S]/#=>0返回true?我还认为“^character”意味着开始character0是Ruby所称的“truthy”——它在条件句等中被视为true。如果您真的需要将其转换为布尔真,请执行
!!(“S”=~/[S]/)
。关于^,在regexp的开头表示匹配字符串的开头,但在[]内表示“不是以下字符”。