string connstr="select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 order by f1 "; Regex r = new Regex(@"where(?<basename>.*)order",RegexOptions.Compiled); string where= r.Match(connstr).Result("${basename}");
不好意思,wyfwyf2000(云风):可能 我没有说清楚我的意思。我说的是通用的捕获方法,你这个正则表达式,一定得在Where子句后存在order才能正常工作。 有可能是group by ,也有可能后面什么也没有。这样你还能做出来吗?
try string[] slist = {"select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5", "select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 order by f1", "select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 group by f1", "select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 group by f1 order by f1" }; Regex re = new Regex(@"where(.*?)(?:order|group|\s*$)", RegexOptions.IgnoreCase); foreach (string s in slist) { Match m = re.Match(s); if (m.Success) Console.WriteLine(m.Groups[1].Value); }
Regex r = new Regex(@"where(?<basename>.*)(order|group)",RegexOptions.Compiled); string where= r.Match(connstr).Result("${basename}"); 有条件就在(order|group)里补
Regex r = new Regex(@"where(?<basename>.*)(order|group|$\s*)",RegexOptions.Compiled); string where= r.Match(connstr).Result("${basename}");
虽然结了贴但是我想说:select f1 ,f2, f3 from t1 where f1 like '%order' or f2<>5 order by f1无法正确分析
Regex re = new Regex(@"where(.*?)(?:\s+order|\s+group|\s*$)", RegexOptions.IgnoreCase);
";
Regex r = new Regex(@"where(?<basename>.*)order",RegexOptions.Compiled);
string where= r.Match(connstr).Result("${basename}");
有可能是group by ,也有可能后面什么也没有。这样你还能做出来吗?
string[] slist = {"select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5",
"select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 order by f1",
"select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 group by f1",
"select f1 ,f2, f3 from t1 where f1 like '%4' or f2<>5 group by f1 order by f1"
};
Regex re = new Regex(@"where(.*?)(?:order|group|\s*$)", RegexOptions.IgnoreCase);
foreach (string s in slist)
{
Match m = re.Match(s);
if (m.Success)
Console.WriteLine(m.Groups[1].Value);
}
string where= r.Match(connstr).Result("${basename}");
有条件就在(order|group)里补
string where= r.Match(connstr).Result("${basename}");