110,561
社区成员
发帖
与我相关
我的任务
分享
string str = @"SELECT * ,
( SELECT 1
FROM aaa
)
FROM aaa
WHERE x IN ( SELECT x
FROM bbb )";
Regex reg = new Regex(@"(?is)(select)(?:\([^()]*\)|[^()])*(from)");
Match m = reg.Match(str);
if (m.Success)
{
richTextBox2.Text += "匹配内容:" + m.Groups[1].Value.PadRight(8) + "索引:" + m.Groups[1].Index + "\n";
richTextBox2.Text += "匹配内容:" + m.Groups[2].Value.PadRight(8) + "索引:" + m.Groups[2].Index + "\n";
}
/*-----输出-----
匹配内容:SELECT 索引:0
匹配内容:FROM 索引:43
*/
string str = @"SELECT * ,
( SELECT 1
FROM aaa
)
FROM aaa
WHERE x IN ( SELECT x
FROM bbb )";
Regex reg = new Regex(@"(?is)(?<!\([^()]*)(select)(?:\([^()]*\)|[^()])*(from)");
Match m = reg.Match(str);
if (m.Success)
{
richTextBox2.Text += "匹配内容:" + m.Groups[1].Value.PadRight(8) + "索引:" + m.Groups[1].Index + "\n";
richTextBox2.Text += "匹配内容:" + m.Groups[2].Value.PadRight(8) + "索引:" + m.Groups[2].Index + "\n";
}
/*-----输出-----
匹配内容:SELECT 索引:0
匹配内容:FROM 索引:43
*/
string str = @"SELECT * ,
( SELECT (1)
FROM aaa
)
FROM aaa
WHERE x IN ( SELECT x
FROM bbb )";
Regex reg = new Regex(@"(?is)(?<!\([^()]*)(select)(?:\((?>\((?<o>)|\)(?<-o>)|[^()]*)*(?(o)(?!))\)|[^()])*(from)");
Match m = reg.Match(str);
if (m.Success)
{
richTextBox2.Text += "匹配内容:" + m.Groups[1].Value.PadRight(8) + "索引:" + m.Groups[1].Index + "\n";
richTextBox2.Text += "匹配内容:" + m.Groups[2].Value.PadRight(8) + "索引:" + m.Groups[2].Index + "\n";
}
/*-----输出-----
匹配内容:SELECT 索引:0
匹配内容:FROM 索引:45
*/
string str = @"SELECT * ,
( SELECT 1
FROM aaa
)
FROM aaa
WHERE x IN ( SELECT x
FROM bbb )";
string result = Regex.Replace(str, @"(?is)\([^\)]+\)", delegate(Match m) { return new string('_', m.Value.ToCharArray().Length); });
Regex reg = new Regex("(?i)select|from");
foreach (Match m in reg.Matches(result))
Response.Write(m.Value + "==" + m.Index + "<br/>");
void Main()
{
string str=@"SELECT * ,
( SELECT 1
FROM aaa
)
FROM aaa
WHERE x IN ( SELECT x
FROM bbb )";
var query=str.Split().Select((s,index)=>new{key=index,value=s});
var left=query.FirstOrDefault(q=>q.value=="(").key;
var bottom=query.FirstOrDefault(q=>q.value==")"&&q.key>left).key;
var right=query.LastOrDefault(q=>q.value=="(").key;
Console.WriteLine("Before Query:");
query.ToList().ForEach(q=>Console.WriteLine("{0}:\t{1}",string.IsNullOrEmpty(q.value)?"BLANK":q.value,q.key));
var result=from q in query
where (q.value=="SELECT" && q.key<left)
||(q.value=="FROM" && q.key>bottom && q.key <right)
select q;
Console.WriteLine("After Query:");
result.ToList().ForEach(q=>Console.WriteLine("{0}:\t{1}",q.value,q.key));
/*
Before Query:
SELECT: 0
*: 1
,: 2
BLANK: 3
BLANK: 4
BLANK: 5
(: 6
SELECT: 7
1: 8
BLANK: 9
BLANK: 10
BLANK: 11
FROM: 12
aaa: 13
BLANK: 14
BLANK: 15
BLANK: 16
): 17
BLANK: 18
FROM: 19
aaa: 20
BLANK: 21
WHERE: 22
x: 23
IN: 24
(: 25
SELECT: 26
x: 27
BLANK: 28
BLANK: 29
BLANK: 30
FROM: 31
bbb: 32
): 33
After Query:
SELECT: 0
FROM: 19
*/
}