正则表达式匹配“Order by”sql语法

时间:2015-05-06 11:48:55

标签: regex

在SQL中我们可以这样做:

.... ORDER BY col1 (ASC/DESC) , col2 (ASC/DESC) , .....

我正在尝试编写一个正则表达式来捕获:(最后的$是为了确保查询在一行中)

(^|\|\s*?)order\s+by\s+\w\s+(asc | desc)?(\s+,\w\s+(asc | desc)?)*$

不幸的是,输入字符串

"order by MyCol" 
https://regex101.com/中的

给出0结果。有谁知道我哪里出错了?

2 个答案:

答案 0 :(得分:1)

我修了几件事:

order\s+by\s+\w+(\s+asc|\s+desc)?([\s,]*\w+(\s+asc|\s+desc)?)*$

答案 1 :(得分:0)

我要用这个。它比Denys的回答更笼统-我要感谢他为我指出了正确的方向,以解决我犯的错误。

ORDER \s+ BY \s+(\s*[a-z_\[][\w_\[\]\.]* (\s+COLLATE \s+ [a-z_\[][\w_\[\]\.]*)? (\s+(ASC|DESC))?) (\s*, (\s*[a-z_\[][\w_\[\]\.]* (\s+COLLATE \s+ [a-z_\[][\w_\[\]\.]*)? (\s+(ASC|DESC))?))*

仅出于可读性而包含空格:请将其删除,或者,如果使用.NET Regex类,则指定RegexOptions.IgnorePatternWhiteSpace选项。无论如何,请确保您忽略大小写并考虑多行匹配。