簡體   English   中英

使用正則表達式在SQL查詢中分隔分配的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM