我一直在教自己Ruby和我试图解决的某个问题我注意到很多人在他们的代码中使用=~
和/\
。我不确定它们是如何工作的,只是想解释一下。例如,我正在查看这个Pig Latin翻译器的代码,这是我第一次看到这些代码被使用。
def piglatin(word)
if word =~ (/\A[aeiou]/i)
word = word + 'ay'
elsif word =~ (/\A[^aeiou]/i)
match = /\A[^aeiou]/i.match(word)
word = match.post_match + match.to_s + 'ay'
end
word
end
我对/\
斜杠和=~
答案 0 :(得分:27)
=~
被称为“匹配运算符”,可用于将字符串与正则表达式进行匹配。
/\
实际上是两件事的一部分。 /
表示正则表达式的开头,\A
称为“锚”,并且表示“从字符串的开头匹配。”
编辑:This is a link to the documentation that should help you understand more code like you posted.
感谢Wayne Conrad对'/ \'进行更正
答案 1 :(得分:7)
=~
是Ruby的模式匹配运算符。
它将左侧的正则表达式与右侧的字符串匹配。
如果找到匹配项,则返回字符串中第一个匹配项的索引。如果找不到字符串,则返回nil。
/abc/ =~ "abcdef"
在这种情况下,表达式返回0,因为这是" abc"的第一个匹配的索引。在字符串中。
/xyz/ =~ "abcdef"
返回nil,因为" xyz"在字符串中的任何地方都找不到。
至于/\
:
/ Defines the start and end of a regular expression
\ References a regular expression
例如:
\d => Matches all digits
答案 2 :(得分:2)
Ruby中的equal-tilde运算符是“匹配”运算符。它在左侧采用正则表达式,在右侧采用匹配的字符串。表达式:
/or/ =~ “Hello World”
将返回7,因为在字符串的索引7上找到匹配项。索引从0开始。
表达式:
/abc/ =~ “Hello World”
将返回nil,因为没有匹配。
答案 3 :(得分:1)
除了使用/\A
和=~
之外,该代码写得不好,所以不要模仿它。这有点像Ruby一样:
def piglatin(word)
if word[/\A[aeiou]/i]
word + 'ay'
else
word[1..-1] + word[0] + 'ay'
end
end
piglatin('apple') # => "appleay"
piglatin('banana') # => "ananabay"
为此目的,^
和\A
一样有效,因为他们都是......"开头......"锚。这些来自Anchors definitions:
^
- 匹配行首\A
- 匹配字符串的开头。