为什么这个正则表达式失败了?

时间:2017-01-16 17:39:44

标签: ruby regex

我试图将字符串与regexp匹配,但是当我认为它应该返回true时它返回false。

/^★+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false

#irb example:
2.2.2 :001 > /^★+$/ =~ '✭' ? true : false
=> false 

1 个答案:

答案 0 :(得分:5)

不同的星星

你可以接受不同类型的明星:

/^[\*✭★☆]+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#=> true

/^[\*✭★☆]+$/ =~ "*✭✭✭★✭★✭☆☆✭★**☆*✭★✭*★★*✭★☆✭☆*★" ? true : false
#=> true

对象? true:false

请注意,返回truefalse的三元运算符可能无效,因为它将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