我需要的是在SQL查询中获取所有已分配的值。我只对字符串和数字感兴趣。例如:
SELECT * FROM my_table WHERE ((name="alex" AND age >= 24) OR gender =1)
AND date = CURDATE() ORDER BY active = 1 LIMIT 1
使用PHP preg_match
我希望得到一个包含以下值的数组:
$values = array(
'alex'// name ,
24 //age,
1 //gender,
1 //active
);
我是正则表达式的初学者,我所拥有的就是:
preg_match_all('/\=\s*?(.*)\s*/', $sqlquery, $matches);
将返回单个匹配,即第一个运算符找到后的匹配
答案 0 :(得分:2)
像
这样的东西/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[a-zA-Z0-9]+
将等于的左侧与
\s*
匹配零个或多个空格。
[><!]?
字符类,匹配>
或<
或!
?
量词,确保前面的字符类出现零次或一次。 =
匹配空间。
(["a-zA-Z0-9]+)
匹配equals的右侧。
(?=\)|\s|$)
积极向前看。检查=
的右侧是否后跟\s
或)
或字符串结尾$
<强>测试强>
$string = 'SELECT * FROM my_table WHERE ((name="alex" AND age >= 24) OR gender =1)
AND date = CURDATE() ORDER BY active = 1 LIMIT 1';
preg_match_all('/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/', $string, $matches);
print_r($matches[1]);
// Outputs
// Array ( [0] => "alex"
// [1] => 24
// [2] => 1
// [3] => 1 )
答案 1 :(得分:1)
尝试类似
的内容[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| | |________| |_____|
Assign| op | |
optional s|pace Optional function call
Any word, number, ", ' and space
但你为什么要那样?也许你可以在没有解析SQL的情况下从PHP那里做到这一点?