1

次の正規表現があります。

^[[][A-Za-z_1-9]+[\]]$

この正規表現のすべての一致を文字列で取得できるようにしたいと考えています。一致の形式は[Whatever]. _中括弧内には、または数字も含まれる場合があります。そこで、次のコードを書きました。

private const String REGEX = @"^[[][A-Za-z_1-9]+[\]]$"; 

static void Main(string[] args)
{
    String expression = "([ColumnName] * 500) / ([AnotherColumn] - 50)";

    MatchCollection matches = Regex.Matches(expression, REGEX);

    foreach (Match match in matches)
    {
        Console.WriteLine(match.Value);
    }

    Console.ReadLine();
}

しかし、残念なことに、matches常にゼロのカウントを持っています。どうやら、正規表現は文字列全体が一致しているかどうかをチェックしており、文字列から一致を取得していません。正規表現が間違っているのか、使い方が間違っているのかわかりませんRegex.Matches()

何かご意見は?

4

2 に答える 2

6

正規表現を文字列の最初と最後に固定しているため、もちろん何にも一致しません。

アンカー^を削除すると(開始と$終了の場合)正常に機能します。

[[][A-Za-z_1-9]+[\]]

期待どおり、次のように返されます。

[ColumnName]
[AnotherColumn]
于 2012-10-10T13:00:31.753 に答える
6

探している一致が実際には文字列の先頭と末尾にないため、パターンから文字列アンカー (^および) の先頭/末尾を削除する必要があります。andの代わりにand を$使用することもできます。\[\][[][\]]

private const String REGEX = @"\[[A-Za-z_1-9]+\]";

トリックを行う必要があります。

于 2012-10-10T13:00:46.680 に答える