这种写法也不行啊,因为变量数目和变量名都不确定,下一个可能是C=?[c]?了,主要是想做个参数列表,现在想法是只要能取出几个参数就行。。 SQL就是麻烦啊,本来想是A=? AND B= ?这种写法,后来想想如果C='?'的话,这个'?'可能是用户变量,也可能是实际的值,只能改成?[]?,这种好歹是值的可能性小些。
可惜啊,我这是SQL的WHERE语句。。
PHP里面有能把SQL给解析出来的函数库啥的就好了。。
select * from abc where a=?[123]? and b=?[345]? or c like ?['zzz']? and d <> ?[25]? and v is not ?[NULL]? and zz is ?[NULL]?针对上述语句,使用这个正则表达式:(\S+)[\s+]?(\=|like|or|is not|[\>|\<]{1,2}|is)[\s+]?\?\[(.*?)\]\?(?<!\?\[)得到数组,结果如下:第一组:a=?[123]?第二组:b=?[345]? 第三组:c like ?['zzz']?第四组:d <> ?[25]?第五组:v is not ?[NULL]?第六组:zz is ?[NULL]?其中每组又分三部分(三个括号):字段名称、操作符、值,如:(a)(=)(123),(zz)(is)(NULL)使用php的v_dump能清楚地看到各变量。 另外在匹配中使用了零宽度正回顾后发断言(?!exp),来确保表达式只取最近的?[和]?之间的值。
返回的变量名及值就依 QUERY_STRING 的名称及值。
使用范例
<?php
$str = "first=value&second[]=this+works&second[]=another";
parse_str($str);
echo $first; // 显示出 "value" 字符串
echo $second[0]; // 显示 "this works" 字符串
echo $second[1]; // 显示 "another" 字符串
?>
SQL就是麻烦啊,本来想是A=? AND B= ?这种写法,后来想想如果C='?'的话,这个'?'可能是用户变量,也可能是实际的值,只能改成?[]?,这种好歹是值的可能性小些。
另外在匹配中使用了零宽度正回顾后发断言(?!exp),来确保表达式只取最近的?[和]?之间的值。
上面的语句顺带帮你处理了类似a = 1232这类空格较多的语句:)Good Luck!