1

文字(簡単にするために「a」と言う)を含む文字列をn回、最後にn回一致させるルビー正規表現パターンが必要です。

たとえば、「aaa3」、「aaaa4」などには一致する必要がありますが、「a2」や「aaa1」などには一致しません。

4

3 に答える 3

4

Perl ではできますが、Ruby ではできません。

/^(a+)(??{length($1)})$/

楽しいね?

それをチェックしてください:http://ideone.com/ShB6C

于 2011-08-20T06:03:20.660 に答える
3

正規表現は正規言語ではないため、これは不可能です (正規言語のポンピング補題で簡単に証明できます)。ruby regex が真の正規表現よりもどれほど強力かはわかりませんが、これに十分強力であるとは思えません。それに有限の制限を設定し、次のように各可能性を述べることができます。

a1|aa2|aaa3|aaaa4|aaaaa5||aaaaaa6||aaaaaaa7||aaaaaaaa8||aaaaaaaaa9

すべての有限言語は規則的であるため、文字列演算を使用して文字が出現する回数をカウントし、その文字の最後の直後の文字列でその整数を解析するのは非常に簡単です。

于 2011-08-20T05:26:33.287 に答える
1

私は目が覚めたばかりなので、これを一粒の塩で取ってください。しかし、単一の正規表現でそれを行う代わりに、それを行う簡単な方法は

def f(s)
  s =~ /(a+)(\d)/
  $1.size == $2.to_i
end #=> nil
f 'aaa3' #=> true
f 'aa3' #=> false
于 2011-08-20T08:20:51.220 に答える