$s=preg_replace('/SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/','SELECT count(\\2) AS c',$s);请教一下高人/SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/和SELECT count(\\2) AS c解析的是什么sql语句?

解决方案 »

  1.   

    将$s中的sql语句的从select【可能使用了distinct】到第一个选择的字段【可能设置了别名】不区分字母大小写的替换为select count(第一个别名的名称【使用了第2个组】) AS c给个例子给你看
    echo "区分大小写\n";
    $s="select field from table";
    echo $s."\n";
    $s=preg_replace('/SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/','SELECT count(\\2) AS c',$s); 
    echo $s."\n\n";echo "不区分大小写\n";
    $s="select field from table";
    echo $s."\n";
    $s=preg_replace('/SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/i','SELECT count(\\2) AS c',$s); 
    echo $s."\n\n";echo "不区分大小写并且包含了distinct和指定别名\n";
    $s="select   distinct field as xxxx from table";
    echo $s."\n";
    $s=preg_replace('/SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/i','SELECT count(\\2) AS c',$s); 
    echo $s;
      

  2.   

    /SELECT\s+(DISTINCT\s+)?(\S+)(\s+AS\s+\S+)?/  匹配的意思是:
    SELECT DISTINCT 非空字符(字段名或别的) AS 非空字符(别名)
    倾斜的是可有可无。另外,在你写的情况下,SELECT count(\\2) AS c,这个不是正则。
      

  3.   


    请问showbo,我给的那个是区分大小写吧
      

  4.   

    噢,我看错了,原来是preg_replace,\2的意思是使用第2个匹配的内容