我试图将字符串与regexp匹配,但是当我认为它应该返回true时它返回false。
/^★+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#irb example:
2.2.2 :001 > /^★+$/ =~ '✭' ? true : false
=> false
答案 0 :(得分:5)
你可以接受不同类型的明星:
/^[\*✭★☆]+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#=> true
/^[\*✭★☆]+$/ =~ "*✭✭✭★✭★✭☆☆✭★**☆*✭★✭*★★*✭★☆✭☆*★" ? true : false
#=> true
请注意,返回true
或false
的三元运算符可能无效,因为它将truthy转换为true
并将falsey转换为false
。
你可以使用:
/^[\*✭★☆]+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭'
#=> 0
由于0
是真实的,它不会改变布尔逻辑的任何内容。
从Ruby 2.4开始,你也可以使用:
'✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭'.match? /^[\*✭★☆]+$/
#=> true
最后,如果你想检查整个字符串是否满星星,你不应该使用^
或$
但\A
和\z
:
p "✭✭✭✭✭✭✭✭✭\nI'm not a star!!!\n✭✭✭✭✭✭".match? /^[\*✭★☆]+$/
#=> true
p "✭✭✭✭✭✭✭✭✭\nI'm not a star!!!\n✭✭✭✭✭✭".match? /\A[\*✭★☆]+\z/
#=> false