我正在尝试将字符串与regexp匹配,但是当我认为它应该返回true时它返回false.
/^?+$/ =~ '???????????????' ? true : false
#irb example:
2.2.2 :001 > /^?+$/ =~ '?' ? true : false
=> false
Run Code Online (Sandbox Code Playgroud)
你可以接受不同类型的星星:
/^[\*???]+$/ =~ '???????????????' ? true : false
#=> true
/^[\*???]+$/ =~ "*???????????**?*???*??*?????*?" ? true : false
#=> true
Run Code Online (Sandbox Code Playgroud)
请注意,三元运算符返回true或false可能无用,因为它将truthy转换为truefalsey false.
你可以使用:
/^[\*???]+$/ =~ '???????????????'
#=> 0
Run Code Online (Sandbox Code Playgroud)
由于0是真的,它不会改变布尔逻辑的任何东西.
从Ruby 2.4开始,您还可以使用:
'???????????????'.match? /^[\*???]+$/
#=> true
Run Code Online (Sandbox Code Playgroud)
最后,如果您要检查整个字符串是全明星,你不应该使用^或$,但\A和\z:
p "?????????\nI'm not a star!!!\n??????".match? /^[\*???]+$/
#=> true
p "?????????\nI'm not a star!!!\n??????".match? /\A[\*???]+\z/
#=> false
Run Code Online (Sandbox Code Playgroud)