1

我有以下带有 SQL 命令的字符串:

string sql = "select [x] from table where field = [y] order by [w], [z]";

我想获得[brackets](x, y, w, z, etc...) 中的键,我怎么能用 C# 做到这一点?有没有办法用正则表达式(不是必需的)来做到这一点?

我尝试用while语句做一些事情,但它不起作用。

谢谢

4

2 回答 2

5

使用正则表达式:

@"\[(.)]"

这将[]在使用 的Matches方法时捕获 中的字母Regex

由于括号内可能有单词,因此正则表达式要复杂一些。

我将假设这些永远不会包含转义]- 所以以下应该有效:

@"\[([^\]]+)]"

用法:

var matches = Regex.Matches("select [x] from table where field = [yy] order by [w], [z]", @"\[([^\]]+)]");

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

请注意, 中有一个默认组match.Groups,因此您将获得重复项。

于 2012-10-23T15:51:01.393 回答
1
string sql = "select [x] from table where field = [jkjlh] order by [w], [z]";
var matches = Regex.Matches(sql,@"\[(.*?)\]");
var result = Enumerable.Cast<Match>(matches).Select(m => m.Groups[1].Value).ToList();

结果将包含带有键的字符串列表。

于 2012-10-23T16:14:10.010 回答