5

*+演算子が一致する繰り返しの数をカウントできる正規表現フレーバーはありますか?特に、.NETプラットフォームで可能かどうかを知りたいです。

4

3 に答える 3

9

実際、.NET正規表現がこれを実行するので幸運です(これは非常にユニークだと思います)。本質的にすべてMatchで、それぞれが作られたGroupすべてを保存します。Captures

したがって、次の方法で、繰り返し可能なパターンが入力と一致した回数を数えることができます。

  • キャプチャグループにする
  • 各試合でそのグループによって行われたキャプチャの数を数える
    • 必要に応じて、個別のキャプチャを繰り返すこともできます。

次に例を示します。

Regex r = new Regex(@"\b(hu?a)+\b");

var text = "hahahaha that's funny but not huahuahua more like huahahahuaha";
foreach (Match m in r.Matches(text)) {
   Console.WriteLine(m + " " + m.Groups[1].Captures.Count);
}

これは(ideone.comで見られるように)印刷します:

hahahaha 4
huahuahua 3
huahahahuaha 5

APIリファレンス

于 2010-06-12T15:50:58.533 に答える
3

式で括弧を使用してグループを作成してから、グループで+or*演算子を使用できます。のCapturesプロパティをGroup使用して、一致した回数を判別できます。次の例では、文字列の先頭にある連続する小文字の数をカウントします。

var regex = new Regex(@"^([a-z])+");
var match = regex.Match("abc def");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Captures.Count);
}
于 2010-06-12T15:39:50.213 に答える
0

取ってみませんか"pref ([a-z]+) suff"

次に、グループを使用して括弧内の[az] +をキャプチャし、その長さを見つけますか?

この長さは、後続のマッチングにも使用できます。

于 2010-06-12T15:25:34.413 に答える