我需要在 Ruby 中写一个正则表达式 returns true / false
I need to write a regex in Ruby that returns true / false
我正在尝试编写一个正则表达式,它接受一个单词,并且 return 对于以元音开头的单词为真,对于以辅音开头的单词为 return 为假。我以前从未写过正则表达式,我对如何编写表达式有点困惑。这是我目前所拥有的:
def starts_with_a_vowel?(word)
if word.match(/\A+[aeiou]/) == true
return true
else
return false
end
end
编辑:所以如果 word = "boat" ,表达式应该 return false。如果 word = "apple",表达式应该 return 为真。
这里有几种方法可以做到这一点。
#1
word = 'Ahoy'
!!(word[0] =~ /[aeiou]/i)
#=> true
word = 'hiya'
!!(word[0] =~ /[aeiou]/i)
#=> false
正则表达式为 "match a vowel, case indifferently (/i
)"。 !!
将真实值转换为 true
并将虚假值(nil
或 false
)转换为 false
:
!!0 = !(!0) = !(false) = true
!!nil = !(!nil) = !(true) = false
#2
word = 'Ahoy'
(word[0] =~ /[aeiou]/i) ? true : false
#=> true
word = 'hiya'
(word[0] =~ /[aeiou]/i) ? true : false
#=> false
编辑:
好的..所以..我从来没有测试过我以前写的代码..它只是作为一些建议如何使用正则表达式的match
,但它根本不起作用..(那个代码片段现在附在我的答案的末尾 fyi)
这应该是有效的:
def starts_with_a_vowel?(word)
!!word.capitalize.match(/\A+[AEIOU]/)
end
..但是 Eric Duminil 在下面的评论中是如何提到它的,method/function 是
不需要
!!word.capitalize.match(/\A+[AEIOU]/)
可以直接用..
它 returns true
或 false
但肯定还有其他(也许更好)的解决方案..
..这是我以前写的不工作的代码:
def starts_with_a_vowel?(word)
return word.match(/\A+[aeiou]/).length > 0
end
..match
方法 returns nil
当不匹配时,因为 nil
没有定义 length
方法,它引发 NoMethodError
你无缘无故地做了很多额外的工作。首先,您不需要检查 true
是否相等;只需 if *expression*
即可。
但在这种情况下,您根本不需要 if
。正则表达式已经 return 匹配了一个可以解释为布尔值的值。 =~
returns 作为整数的匹配索引(即 "truthy"); String#match
return 是一个 MatchData
对象(也是真实的)。 Ruby 中的所有内容 除了 false
和 nil
都是真实的,而 nil
是 =~
和 [=15] =] return 如果没有匹配项。所以你所要做的就是将其中一个的结果转换为相应的布尔值,你可以用 !!
来完成。例如:
def starts_with_a_vowel? word
!!(word =~ /^[aeiou]/)
end
那个!!
读作"not not",顺便说一句。 !
运算符本身将其参数视为布尔值,而 return 将其相反视为 actual 布尔值;那是 !(
一些真实值 )
returns false
(不是 nil
),并且 !(
一些虚假值)
returns true
(不仅仅是一些真实值)。因此应用 !
两次将任何真值变为 true
并将任何假值(false
或 nil
)变为 false
.
在 Ruby 中,您几乎不需要任何东西来 return 判断真假。对于布尔逻辑和 if/case/unless
语句,truthy/falsey
就足够了。另外,不要忘记使用不区分大小写的正则表达式(//i
)。 A
是一个元音字母 :
class String
def starts_with_a_vowel?
self =~ /\A[aeiou]/i
end
end
if "Airplane".starts_with_a_vowel?
puts "Indeed"
end
#=> "Indeed"
如果出于某种原因你确实需要 true/false
:
class String
def starts_with_a_vowel?
!(self =~ /\A[aeiou]/i).nil?
end
end
你会使用正则表达式吗?只是问原因 Ruby 已经提供 String#start_with?
vowels = %w(a e i o u)
"boat".start_with?(*vowels)
# => false
"apple".start_with?(*vowels)
#=> true
word.match? /\A[aeiou]/i
就是您真正需要的。 (ruby >= 2.4)
它以不区分大小写的方式匹配字符串 \A
后跟元音 [aeiou]
的开头 i
返回布尔值 word.match?
在 ruby 2.4 之前,您必须使用 word.match
并将其转换为布尔值,最简单的方法是使用 !!
逻辑取反两次
我正在尝试编写一个正则表达式,它接受一个单词,并且 return 对于以元音开头的单词为真,对于以辅音开头的单词为 return 为假。我以前从未写过正则表达式,我对如何编写表达式有点困惑。这是我目前所拥有的:
def starts_with_a_vowel?(word)
if word.match(/\A+[aeiou]/) == true
return true
else
return false
end
end
编辑:所以如果 word = "boat" ,表达式应该 return false。如果 word = "apple",表达式应该 return 为真。
这里有几种方法可以做到这一点。
#1
word = 'Ahoy'
!!(word[0] =~ /[aeiou]/i)
#=> true
word = 'hiya'
!!(word[0] =~ /[aeiou]/i)
#=> false
正则表达式为 "match a vowel, case indifferently (/i
)"。 !!
将真实值转换为 true
并将虚假值(nil
或 false
)转换为 false
:
!!0 = !(!0) = !(false) = true
!!nil = !(!nil) = !(true) = false
#2
word = 'Ahoy'
(word[0] =~ /[aeiou]/i) ? true : false
#=> true
word = 'hiya'
(word[0] =~ /[aeiou]/i) ? true : false
#=> false
编辑:
好的..所以..我从来没有测试过我以前写的代码..它只是作为一些建议如何使用正则表达式的match
,但它根本不起作用..(那个代码片段现在附在我的答案的末尾 fyi)
这应该是有效的:
def starts_with_a_vowel?(word)
!!word.capitalize.match(/\A+[AEIOU]/)
end
..但是 Eric Duminil 在下面的评论中是如何提到它的,method/function 是 不需要
!!word.capitalize.match(/\A+[AEIOU]/)
可以直接用..
它 returns true
或 false
但肯定还有其他(也许更好)的解决方案..
..这是我以前写的不工作的代码:
def starts_with_a_vowel?(word)
return word.match(/\A+[aeiou]/).length > 0
end
..match
方法 returns nil
当不匹配时,因为 nil
没有定义 length
方法,它引发 NoMethodError
你无缘无故地做了很多额外的工作。首先,您不需要检查 true
是否相等;只需 if *expression*
即可。
但在这种情况下,您根本不需要 if
。正则表达式已经 return 匹配了一个可以解释为布尔值的值。 =~
returns 作为整数的匹配索引(即 "truthy"); String#match
return 是一个 MatchData
对象(也是真实的)。 Ruby 中的所有内容 除了 false
和 nil
都是真实的,而 nil
是 =~
和 [=15] =] return 如果没有匹配项。所以你所要做的就是将其中一个的结果转换为相应的布尔值,你可以用 !!
来完成。例如:
def starts_with_a_vowel? word
!!(word =~ /^[aeiou]/)
end
那个!!
读作"not not",顺便说一句。 !
运算符本身将其参数视为布尔值,而 return 将其相反视为 actual 布尔值;那是 !(
一些真实值 )
returns false
(不是 nil
),并且 !(
一些虚假值)
returns true
(不仅仅是一些真实值)。因此应用 !
两次将任何真值变为 true
并将任何假值(false
或 nil
)变为 false
.
在 Ruby 中,您几乎不需要任何东西来 return 判断真假。对于布尔逻辑和 if/case/unless
语句,truthy/falsey
就足够了。另外,不要忘记使用不区分大小写的正则表达式(//i
)。 A
是一个元音字母 :
class String
def starts_with_a_vowel?
self =~ /\A[aeiou]/i
end
end
if "Airplane".starts_with_a_vowel?
puts "Indeed"
end
#=> "Indeed"
如果出于某种原因你确实需要 true/false
:
class String
def starts_with_a_vowel?
!(self =~ /\A[aeiou]/i).nil?
end
end
你会使用正则表达式吗?只是问原因 Ruby 已经提供 String#start_with?
vowels = %w(a e i o u)
"boat".start_with?(*vowels)
# => false
"apple".start_with?(*vowels)
#=> true
word.match? /\A[aeiou]/i
就是您真正需要的。 (ruby >= 2.4)
它以不区分大小写的方式匹配字符串 \A
后跟元音 [aeiou]
的开头 i
返回布尔值 word.match?
在 ruby 2.4 之前,您必须使用 word.match
并将其转换为布尔值,最简单的方法是使用 !!