Mar*_*rco 17 ruby regex syntax
检查模式字符串的方法的正确语法是什么,如果正则表达式匹配则返回true或false?
基本理念:
def has_regex?(string)
pattern = /something/i
return string =~ pattern
end
Run Code Online (Sandbox Code Playgroud)
使用案例:
if has_regex?("something")
# woohoo
else
# nothing found: panic!
end
Run Code Online (Sandbox Code Playgroud)
Rya*_*yan 44
在你提出的问题中:
...检查字符串中的模式的方法,如果正则表达式匹配则返回true或false
正如johannes所指出的那样,如果模式不匹配则String=~返回nil,并且字符串中匹配单词的位置也会相反.此外,他在Ruby中陈述除了nil和false 表现的 一切true.所有这一切都是对的.
但是,它们并不完全 true或false.因此,最后一步是将价值强制为a Boolean.这是通过将结果包装成双重刘海返回a来实现的true.
def has_regex?(string)
!!(string =~ /something/i)
end
Run Code Online (Sandbox Code Playgroud)
joh*_*nes 15
你的代码看起来很好,但你可以写得更小.
返回值的String#=~行为方式如下:
nil 如果模式不匹配在Ruby中一切,除了nil和false行为就像true在条件语句中,所以你可以只写
if string=~ pattern
# do something
else
# panic
end
Run Code Online (Sandbox Code Playgroud)
小智 11
要使其返回true/false,请切换模式和字符串的位置并使用大小写相等===
def has_regex?(string)
pattern = /something/i
return pattern === string
end
Run Code Online (Sandbox Code Playgroud)
我绝对需要它来返回真正的布尔值并挖掘.它实际上记录在regexp类中http://www.ruby-doc.org/core-2.1.3/Regexp.html#method-i-3D-3D-3D
如果您在使用Ruby 2.4或更高版本,也有String#match?(regex)和Regexp#match?(string),如果没有转换的恶作剧(在需要的地方,通常不)返回布尔值的方法,并提高了性能,开机.
https://ruby-doc.org/core-2.4.0/Regexp.html#method-i-match-3F
https://blog.cognitohq.com/new-features-in-ruby-2-4/
Sha*_*ird -3
如果你想将模式放入方法中,你可以这样做
def has_my_pattern(st)
st =~ /pattern/
end
Run Code Online (Sandbox Code Playgroud)
或者,也许更好,将模式放入类变量中?