先把Select给替换成空的,然后用from分开不就得到你要的了?,用不上正则,适当的话,可以来一个trim

解决方案 »

  1.   

    使用分词例如split函数 可能会比较简单将字符串分成
    (select) (field1),(field2) (from) (tablename)
    然后再提取
      

  2.   

    倒,这这么做有什么用途吗?/select\s+([^\s]+)\S+from\s([^\s]+)/其中$1和$2就是你要的了
      

  3.   

    <pre>
    <?php
    $str = 'select field1,field2 from tablename';
    print_r(getStruct($str));function getStruct($s) {
    list($s1,$s2) = split(' from ',$s);
    $s1 = trim(str_replace(array('select','SELECT'),'',$s1));
    $rs['fields'] = split(',',$s1);
    $rs['table'] = trim($s2);
    return $rs;
    }
    ?>
    </pre>为什么一做字符串处理就想到用正则,这种思想是不对的...
    正则不是万能,而且在大部份情况下,速度比较慢
      

  4.   

    呵呵,LZ的还需要改改,不然后面有一个where或者ordr by之类的可就要出错了
      

  5.   

    $sql = 'select field1,field2 from tablename';
    preg_match_all('/select\s+(.*)\s+from\s+(.*)/',$sql,$matchs);
    print_r($matchs);
      

  6.   

    楼主如果是写个sql类
    啊思路上有问题吧如果是 字段 和表名可以做参数