<?
$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
)
再根据需要进行取舍
$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
)
再根据需要进行取舍
$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'
))
1. array的[0]为空因为"where"为切割条件
2. ORDER by 被拆开了,这是因为ORDER中含有"OR"
3. 大小写问题.
因此在使用正则之前,我们先过滤掉这些如'order'/'where'等等(注意大小写问题)
然后再切割,同样也要注意大小写问题