比如A=?[a]? and B='?[b]?'
项目数不定,上边是2个的,可能是多个的,现在要得到小写的a,b

解决方案 »

  1.   

    A\=\?(.*)\? [A|a][N|n][D|d] B\='\?([^']*)\?'未必能解决你的问题。SQL查询往往有子查询语句好像有点复杂。
      

  2.   

    如果你是HTTP的数据提交可以尝试parse_str本函数可将浏览器返回的 GET 方法的 QUERY_STRING 字符串解析。
    返回的变量名及值就依 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" 字符串
    ?> 
      

  3.   

    这种写法也不行啊,因为变量数目和变量名都不确定,下一个可能是C=?[c]?了,主要是想做个参数列表,现在想法是只要能取出几个参数就行。。
    SQL就是麻烦啊,本来想是A=? AND B= ?这种写法,后来想想如果C='?'的话,这个'?'可能是用户变量,也可能是实际的值,只能改成?[]?,这种好歹是值的可能性小些。
      

  4.   

    可惜啊,我这是SQL的WHERE语句。。
      

  5.   

    PHP里面有能把SQL给解析出来的函数库啥的就好了。。
      

  6.   

    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),来确保表达式只取最近的?[和]?之间的值。
      

  7.   

    搞错了是,var_dump()
    上面的语句顺带帮你处理了类似a    = 1232这类空格较多的语句:)Good Luck!