如何写这样的正则表达式,高手帮忙,不胜感激!

lxlstars 2012-10-23 09:30:45
想写一个正则表达式,去验证一个sql脚本文件中的delete 语句中必须有where条件,试写了几个,验证的都不够全面,该如何写呢,哪位高手能帮个忙,不胜感激!例如:select * from test delete from test update table set id =0 where name=123,这条sql语句包含了delete 但是没有where语句!
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxlstars 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
什么情况下,会把update的where条件当作delete的where?请给个反例出来。
[/Quote]
搞错了,不好意思,dalmeeme你太厉害了,排名187,名至实归呀
lxlstars 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
string sql = "";
MatchCollection mc = Regex.Matches(sql, @"(where|and)\s*(?=\S*\s*(?<t>\S+))(?<c>((?!\'t')\S)+)\s*\'t'\s*(?<v>@\S+)");
foreach (Match m in mc)
{
Console.WriteLine("列名:" + m……
[/Quote]
很感谢wuyq11
测试验证不出delte from ...where 语句,找不出来.麻烦能不能再看看。
dalmeeme 2012-10-23
  • 打赏
  • 举报
回复
什么情况下,会把update的where条件当作delete的where?请给个反例出来。
lxlstars 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
C# code

string s = "select * from test delete from test update table set id =0 where name=123";
bool result = Regex.IsMatch(s, @"(?is)delete\s+from\s+\w+\s+where");
Respon……
[/Quote]
很感谢 dalmeeme
这个正则表达式好像把update的where条件,当做delete的where条件验证了。要是能在where之前排除select、update和insert就基本上完美了!
wuyq11 2012-10-23
  • 打赏
  • 举报
回复
string sql = "";
MatchCollection mc = Regex.Matches(sql, @"(where|and)\s*(?=\S*\s*(?<t>\S+))(?<c>((?!\'t')\S)+)\s*\'t'\s*(?<v>@\S+)");
foreach (Match m in mc)
{
Console.WriteLine("列名:" + m.Groups["c"].Value);
Console.WriteLine("方式:" + m.Groups["t"].Value);
}
dalmeeme 2012-10-23
  • 打赏
  • 举报
回复
		string s = "select * from test delete from test update table set id =0 where name=123";
bool result = Regex.IsMatch(s, @"(?is)delete\s+from\s+\w+\s+where");
Response.Write(result);

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧