我需要一个ruby regexp模式,它匹配一个包含字母的字符串(为简单起见'a')n次,然后是n。
例如,它应匹配“aaa3”,“aaaa4”等但不匹配“a2”或“aaa1”等。
答案 0 :(得分:3)
这在正则表达式中是不可能的,因为它不是常规语言(使用Pumping Lemma for Regular Languages很容易证明)。我不确定红宝石正则表达式是多么强大而不是真正的正则表达式,但我怀疑它对此有多强大。您可以对其设置有限限制并说明每种可能性:
a1|aa2|aaa3|aaaa4|aaaaa5||aaaaaa6||aaaaaaa7||aaaaaaaa8||aaaaaaaaa9
由于所有有限的语言都是常规的,但是使用字符串操作来计算字母出现的次数会很容易,然后在该字母的最后一个字符串之后的字符串中解析该整数。
答案 1 :(得分:3)
答案 2 :(得分:1)
我刚刚醒来,所以拿出一粒盐,但不是用一个正则表达式来做,一个简单的方法就是
def f(s)
s =~ /(a+)(\d)/
$1.size == $2.to_i
end #=> nil
f 'aaa3' #=> true
f 'aa3' #=> false