我需要为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">
有什么建议吗?
答案 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"