正则表达式只有2个字母

时间:2014-03-23 04:35:39

标签: ruby regex

我需要为2和2个字母创建正则表达式。我知道它必须是以下/[a-z]{2}/i,但它匹配任何包含2个或更多字母的字符串。这是我得到的:

my_reg_exp = /[a-z]{2}/i
my_reg_exp.match('aa')    # => #<MatchData "aa">
my_reg_exp.match('AA')    # => #<MatchData "AA">
my_reg_exp.match('a')     # => nil
my_reg_exp.match('aaa')   # => #<MatchData "aa">

有什么建议吗?

3 个答案:

答案 0 :(得分:12)

您可以像这样添加锚点:

my_reg_exp = /^[a-z]{2}$/i

测试:

my_reg_exp.match('aaa')
#=> nil
my_reg_exp.match('aa')
#=> #<MatchData "aa">

答案 1 :(得分:2)

Hao的解决方案匹配不是区域设置敏感的。如果这对您的用例很重要:

/\a[[:alpha:]]{2}\z/

2.0.0-p451 :005 > 'aba' =~ /\A[[:alpha:]]{2}\Z/
 => nil 
2.0.0-p451 :006 > 'ab' =~ /\A[[:alpha:]]{2}\Z/
 => 0 
2.0.0-p451 :007 > 'xy' =~ /\A[[:alpha:]]{2}\Z/
 => 0 
2.0.0-p451 :008 > 'zxy' =~ /\A[[:alpha:]]{2}\Z/
 => nil 

按照惯例,如果您需要进一步的帮助,请发表评论。

答案 2 :(得分:0)

您可以使用/\b[a-z]{2}\b/i匹配两个字母的字符串。 /b匹配分词。

这意味着你可以scan一个字符串来查找所有出现的内容:

'Foo is a bar'.scan(/\b[a-z]{2}\b/i) #=> ["is"]

或使用以下命令查找字符串中的第一个匹配项:

'a bc def'[/\b[a-z]{2}\b/i] # => "bc"