21,886
社区成员
发帖
与我相关
我的任务
分享
$s =<<< TXT
select * from tjw_person where personname like '%南京%' and uid=16782132 and uid>10000 and uid<1000000 and uid in(16791444,16782132,16807195) and (uid=16782132 and sex=0) or (uid=1304049 and sex=1)
TXT;
$t = preg_split('/(\bwhere\b|\bgroup\b|\border\b|\blimit\b)/i', $s, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$t = preg_split('/(\band\b|\bor\b)/i', $t[2], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for($i=0; $i<count($t); $i++) {
$v = $t[$i];
if(in_array($v, array('and', 'or'))) {
$v .= $t[++$i];
if(strstr($v, '(')) while(!strstr($v, ')')) $v .= $t[++$i];
}
$r[] = $v;
}
print_r($r);
Array
(
[0] => personname like '%南京%'
[1] => and uid=16782132
[2] => and uid>10000
[3] => and uid<1000000
[4] => and uid in(16791444,16782132,16807195)
[5] => and (uid=16782132 and sex=0)
[6] => or (uid=1304049 and sex=1)
)