0

入力は55、で、正規表現は^(5{2})$です。したがって、理想的には(少なくとも私にとっては)、これは5で始まり、5で終わるすべての文字列を返す必要がありますか?

しかし、私のc#が次のような場合:

Match match = Regex.Match(input, String.Format(@"{0}", regex));
string outcome = null;

if (match.Success)
{
    for (int i = 0; i < match.Groups.Count; i++)
    {
        outcome += match.Groups[i].Value;
    }
}

outcome文字列が55ではなく5555を返すのはなぜですか?

正規表現からブラケットを削除すると、完全に機能します。

4

1 に答える 1

4

の最初のアイテムにmatch.Groupsは、正規表現によって取得された一致全体が含まれています。2番目の項目は、括弧内にキャプチャされたものです。

正規表現と入力は基本的に同じ文字列"55"であるため、2つの同一の一致が得られます。1つは一致した入力全体、もう1つはキャプチャグループ(角かっこ)です。

これらの両方が連結され、が得られます。"55" + "55"これは"5555"です。

于 2011-07-24T00:27:59.133 に答える