小弟想请教大侠,这个正则应该怎么写
我想把类似 select code,name from table1 where code in (select code from table2) order by code 的语句转换为
select count(1) from table1 where code in (select code from table2)
也就是输入任意的一个sql语句,转换为可以查询出记录数的语句。在线求教。

解决方案 »

  1.   

    简单一点的。
    sql = "select count(1) as c from ("+ sql +") AS AA " ;
      

  2.   

    我写得比较烂,而且必须指定table1,期待更好的答案
    (?<=select) .+ (?=from table1)
      

  3.   

    我现在这样写
                            regx = new Regex(@"select(\W|\w|\s)*from", RegexOptions.IgnoreCase);
                            commandText = regx.Replace(commandText, "select count(1) from");
                            regx = new Regex(@"order by(\W|\w|\s)*", RegexOptions.IgnoreCase);
                            commandText = regx.Replace(commandText, "");但是后面的子查询也会被替换,期待好的代码
      

  4.   


    为什么不考虑用幂白兄的处理方式
    这里用正则处理局限性比较大,如果select 和from之间有子查询会是比较麻烦的regx = new Regex(@"(?<=^\s*select\s)(?:(?!\bfrom\b).)+(?=\sfrom)", RegexOptions.IgnoreCase); 
    commandText = regx.Replace(commandText, "count(1)"); 
    regx = new Regex(@"order\s+by\s+\w+", RegexOptions.IgnoreCase); 
    commandText = regx.Replace(commandText, ""); 
      

  5.   


    resultSQL=Regex.Replace(yourSQL, "^(?is)select.+?from", "select count(*) from ")