在Ruby中,"=~"运算符是什么?

68

在一次屏幕录像中我看到了这个,但是我不知道它是什么。参考文献将其作为一般模式匹配运算符与其他运算符混在一起。


14
很多时候,人们会简单地使用 Ruby 文档作为回答所有问题的解决方案,却没有意识到 Ruby 文档并不总是易于理解的。很多时候(大部分时间),我开始使用 Ruby 文档,但无法理解其中深奥的解释,然后再去谷歌搜索,结果发现在谷歌上也找不到答案。你不能简单地在谷歌上搜索“Ruby =”或“Ruby = method”或“Ruby =~ operator”来得到一个答案。少一些人把 Ruby 文档简单地当作懒惰的解决方案,多一些深入的、实际有帮助的答案会更好。 - Padawan
7个回答

59

它将字符串与正则表达式进行匹配。

'hello' =~ /^h/ # => 0

如果没有匹配,它将返回nil。如果您传递无效的参数(例如左侧或右侧不正确),它将抛出TypeError或返回false


20

来自ruby-doc:

str =~ obj => fixnum 或 nil

匹配-如果obj是一个RegExp,将其用作与str匹配的模式,并返回匹配开始的偏移位置,如果没有匹配则返回nil。否则,调用obj.=~, 并将str作为参数传递。Object中默认的=~返回false。

"cat o' 9 tails" =~ /\d/   #=> 7
"cat o' 9 tails" =~ 9      #=> false

2
“返回匹配开始的位置”对我来说非常重要 :) 我在谷歌上搜索了很久,终于在这里找到了答案,谢谢! - David K
为什么第二个例子返回false?是因为9不是一个字符串吗? - Jon Schneider
是的,要测试字符串“9”,您需要将其用斜杠括起来,以便它被解释为正则表达式:/9/。 - ohhh

5
作为其他答案所述,=~是正则表达式与字符串匹配运算符。注意:该运算符不可交换。 请参考来自ruby文档站点的下面注释,因为我只看到了第一种形式。
str =~ regexp 

在其他答案中使用:

注意:str =~ regexpregexp =~ str不同。从命名捕获组中捕获的字符串只有在第二种情况下才被赋值给本地变量。

这里是第二种形式的文档:链接


5

好的,参考文献是正确的,它是“匹配此正则表达式”的运算符。

if var =~ /myregex/ then something end

2

1

正则表达式字符串匹配:

如果url =~ /google.com/,则返回true。

您可以将'=〜'读作'正在匹配'。


0

我相信这是与正则表达式一起使用的模式匹配运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接