求正则分析sql
比如
$sql ="
select t.a1
from t
where t.a2 like '%什么什么%'
order by t.a3 asc
GROUP BY t.a4
HAVING t.a5 = '什么什么'
limit 10,5
";
$rule="/(select)(.+)(from)(.+)(where)(.+)(order\s+by)(.+)(group\s+by)(.+)(having)(.+)(limit)(.+)/is";
preg_match_all($rule,$sql,$return);
print_r($return);
没什么问题,但缺少子句的话就不行,比如少了 where/group by 等,
所以,先查找是否有相应子句的关键字,再组合成匹配规则来做?还是可以一条规则就搞定的,或者就单独一个个子句匹配查找?
另外,如果子句内容中出现了关键字咋办?比如 '%什么什么%' 变成了 '%什么where order by limit什么%',或者子查询的
如果这样,是只匹配第一个,还是用排除单引号 ' 这样,具体咋做哩?
顺便问问,正则想排除几个字符串的这种匹配难不难?