正则表达式没有按预期工作

时间:2017-02-02 19:03:31

标签: ruby-on-rails ruby regex

如果字符串是16个字符或更多,我正在尝试返回true,正则表达式是我正在使用的正则表达式。

CODE:

"<p>#MichiganHouseWarehouseEvent</p>" == /\S{16,}/

我试图说if string is 16 chars or more without a space return true但这会返回错误...知道我做错了什么?

1 个答案:

答案 0 :(得分:4)

字符串不能与正则表达式相等(==)。但它可以match一个。

完整字符串

如果要检查完整字符串是否超过16个字符,并且它们都不是空格(或换行符或制表符...):

"<p>#MichiganHouseWarehouseEvent</p>" =~ /\A\S{16,}\z/
#=> 0

请注意,在Ruby中,0是真实的。它是匹配开始的索引。

使用Ruby 2.4,您可以使用match?直接获取布尔值。

子串

如果要检查至少有一个包含16个非空白字符的子字符串:

"0123 01234567890abcdef" =~ /\S{16}/
#=> 5

这种情况比前一种条件限制性更小:

"0123 01234567890abcdef" =~ /\A\S{16,}\z/
#=> nil

你也可以使用:

"0123 01234567890abcdef".split.any?{ |no_space| no_space.size >= 16 }
#=> true