在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结果。有谁知道我哪里出错了?
答案 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
选项。无论如何,请确保您忽略大小写并考虑多行匹配。