【发布时间】:2016-03-07 10:47:09
【问题描述】:
我正在尝试从 mysql ORDER BY 中提取标识符和别名,它可以帮助我的最接近的问题是 Removing aliases from a SQL select statement, using C# and regular expressions
function test($orderby)
{
if(preg_match('/(?<field>.*)(?:\s*|\s+AS\s+)?(?<alias>\w*)?/i', $orderby, $matches)){
unset($matches[1]);
unset($matches[2]);
echo '<pre>'.htmlspecialchars(print_r($matches,true)).'</pre>';
}else{
echo '$orderby doest not matches';
}
}
test("field"); 有效
Array
(
[0] => field
[field] => field
[alias] =>
)
test("table.field"); 有效
Array
(
[0] => table.field
[field] => table.field
[alias] =>
)
test("CONCAT(table.field1, ' ', table.field2) AS alias"); 不起作用
Array
(
[0] => CONCAT(table.field1, ' ', table.field2) AS alias
[field] => CONCAT(table.field1, ' ', table.field2) AS alias
[alias] =>
)
test("table.field alias"); 打印
Array
(
[0] => table.field alias
[field] => table.field alias
[alias] =>
)
我需要示例 3 [field] => CONCAT(table.field1, ' ', table.field2) AND [alias] => alias 和示例 4 [field] => table.field AND [alias] => alias
我想做的是
/
(?<field>.*) #identifier
(?:\s*|\s+AS\s+)? # without spaces (examples 1 and 2), spaces (example 4) OR 'AS' (example 3)
(?<alias>\w*)? #alias
/i
我做错了什么? 提前致谢。
【问题讨论】:
-
不要使用正则表达式,使用适当的 SQL 解析。
标签: php mysql sql regex preg-match