我想匹配正則表達式的字符串,但它相信它應該返回true時返回false。爲什麼這個正則表達式失敗?
/^★+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#irb example:
2.2.2 :001 > /^★+$/ =~ '✭' ? true : false
=> false
我想匹配正則表達式的字符串,但它相信它應該返回true時返回false。爲什麼這個正則表達式失敗?
/^★+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#irb example:
2.2.2 :001 > /^★+$/ =~ '✭' ? true : false
=> false
你可以接受不同類型的明星:
/^[\*✭★☆]+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭' ? true : false
#=> true
/^[\*✭★☆]+$/ =~ "*✭✭✭★✭★✭☆☆✭★**☆*✭★✭*★★*✭★☆✭☆*★" ? true : false
#=> true
注意,返回true
或false
三元運營商可能是沒用的,因爲它轉換truthy到true
和falsey到false
。
你可以只使用:
/^[\*✭★☆]+$/ =~ '✭✭✭✭✭✭✭✭✭✭✭✭✭✭✭'
#=> 0
由於0
是truthy,它不會改變布爾邏輯東西。
隨着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
在Ruby 2.4.0中,您可能想使用['match?'](https://ruby-doc.org/core-2.4.0/String.html#method-i-match-3F):''✭ ✭✭✭✭✭✭✭✭✭✭✭✭✭✭'.match?(/^[\ *✭★] + $ /)' – spickermann
我正在寫它,感謝您的評論。接受了 –
,並感謝冗餘三元運算符 – userFriendly
http://rubular.com/r/4qNdvC2Ap3爲我工作。 –
因爲你的模式中的星星是不同的? –
星星是不同的字符(這就是爲什麼他們看起來不同!) –