[英]Separate assigned values in SQL queries with regex
我需要在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);
這將返回一個匹配項,即找到第一個運算符之后的匹配項
就像是
/[a-zA-Z0-9]+\s*[><!]?=\s*(["a-zA-Z0-9]+)(?=\)|\s|$)/
[a-zA-Z0-9]+
將等號的左側匹配為
\\s*
匹配零個或多個空格。
[><!]?
字符類,匹配>
或<
或!
?
量詞,確保前面的字符類出現零次或一次。 =
匹配空格。
(["a-zA-Z0-9]+)
匹配等於的右側。
(?=\\)|\\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 )
嘗試類似
[=>!<]\s?([\w"'\d\s]+(?:\(\))?)
|____| | |________| |_____|
Assign| op | |
optional s|pace Optional function call
Any word, number, ", ' and space
但是,為什么要那樣? 也許您可以從PHP方面做到這一點而無需解析SQL?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.