<?
$str = "WHERE (a_to_sort.as_id = 'd269742b5dc24a7795afc5ea2346ece5') AND (a.a_key LIKE BINARY '%asdf%' OR (a.a_title LIKE BINARY '% asdf %')) AND (a.a_writer = 'aa') OR a.a_writer = 'bb' ORDER BY a_to_sort.a2as_order DESC";
print_r(split("WHERE|AND|OR", $str));
?>
输出为
Array
(
    [0] => 
    [1] =>  (a_to_sort.as_id = 'd269742b5dc24a7795afc5ea2346ece5') 
    [2] =>  (a.a_key LIKE BINARY '%asdf%' 
    [3] =>  (a.a_title LIKE BINARY '% asdf %')) 
    [4] =>  (a.a_writer = 'aa') 
    [5] =>  a.a_writer = 'bb' 
    [6] => DER BY a_to_sort.a2as_order DESC
)
再根据需要进行取舍

解决方案 »

  1.   

    <?php
    $text =<<< TEXT
    WHERE (a_to_sort.as_id = 'd269742b5dc24a7795afc5ea2346ece5') AND (a.a_key LIKE BINARY '%asdf%' OR (a.a_title LIKE BINARY '% asdf %')) AND (a.a_writer = 'aa') OR a.a_writer = 'bb' ORDER BY a_to_sort.a2as_order DESC
    TEXT;preg_match_all("/[\w.]+ (?:=|LIKE BINARY) '.+'/iU",$text,$regs);
    print_r($regs);
    ?>
    out:
    Array
    (
        [0] => Array
            (
                [0] => a_to_sort.as_id = 'd269742b5dc24a7795afc5ea2346ece5'
                [1] => a.a_key LIKE BINARY '%asdf%'
                [2] => a.a_title LIKE BINARY '% asdf %'
                [3] => a.a_writer = 'aa'
                [4] => a.a_writer = 'bb'
            ))
      

  2.   

    同意楼上的,但楼上的还有一点点不完美,
    1. array的[0]为空因为"where"为切割条件
    2. ORDER by 被拆开了,这是因为ORDER中含有"OR"
    3. 大小写问题.
    因此在使用正则之前,我们先过滤掉这些如'order'/'where'等等(注意大小写问题)
    然后再切割,同样也要注意大小写问题