この試合は一見どんな、私に何の一致を与えていない:C#の正規表現(perlのから来る/ javascriptのバックグラウンド)
static String divine(int n)
{
if (n % 3 == 0) { return String.Join("", Enumerable.Repeat("5", n).ToArray()); }
String res = String.Join("", Enumerable.Repeat(" ", n));
Regex ItemRegex = new Regex(@"^(\\s{3}){0,}(\\s{5})*$", RegexOptions.Compiled);
Match match = ItemRegex.Match(res);
しかし、このPCRE正規表現はregex101.comで完璧に動作している:^(\s{3}){0,}(\s{5})*$
小さなグループ(3つのセット)に常に貪欲にマッチし、必要に応じて大きなグループとマッチし、最後にスペースがないことを示します。
私の質問は、正規表現をC#で期待どおりに動作させるためには何が必要ですか?私が推測しなければならなかった場合、この時点で私は{,}
に向かって傾いている可能性があります?知りません。
正規表現ルールが不明です。あなたはいくつかの例を詳述できますか? –
理由の1つは、最後に '{0、}'と '*'があり、ここで怠惰にマッチしています。だからあなたは2つの場所で**レイネス**を求めています。 '* 'は' 0'以上を意味するためです。これは '{0、}'と '*'のためにゼロをとっているので、何も一致しません。 –
regex101.comに追加してからスペースバーを押すだけで、文字列の長さを変更することができます。それは、3つのスペースまで一致してはならず、次に一致してはならず、次に5つのスペースで右側に一致します。 7でマッチしない。その後、右側に0,1,2マッチのパターンになり、残りは左側にマッチする。 –