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 回答