我有以下带有 SQL 命令的字符串:
string sql = "select [x] from table where field = [y] order by [w], [z]";
我想获得[brackets]
(x, y, w, z, etc...) 中的键,我怎么能用 C# 做到这一点?有没有办法用正则表达式(不是必需的)来做到这一点?
我尝试用while
语句做一些事情,但它不起作用。
谢谢
使用正则表达式:
@"\[(.)]"
这将[]
在使用 的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
,因此您将获得重复项。
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();
结果将包含带有键的字符串列表。