【发布时间】:2016-04-24 18:17:37
【问题描述】:
我需要解析简单的查询构造 可能的选择
select col1,col2
select col1,col2 where col1=1 and col2 = 'title'
select col1,col2 where col1=1 and col2 = 'title' order by col1
select col1,col2 order by col1
我有以下正则表达式
(select-?.*?)\s+(.*?){0,1}(?:\s+(where-?.*?)(.*)){0,1}\s(order by-?.*?){0,1}\s{0,1}
但在我的情况下它很奇怪
我希望order by 属于第 5 组,但在我的情况下,它是第 4 组的一部分。我想要以下订单
- 第 1 组 -
select字 - 组 #2 - 列字符串
- 第 3 组 -
where字词 - 可选 - 组 #4 - 条件字符串 - 可以是可选的(如果不存在)
- 第 5 组 -
order by字 - 可选 - 第 6 组 - 订购者列表 - 可选(如果没有订购者)
那么,有人可以指出我做错了什么吗?
【问题讨论】:
-
图片中的正则表达式不是代码中的。
-
是解释模式的问题还是寻求帮助来修复它?
-
正则表达式比一种语言的语法要简单得多。 SQL 是一种语言(如 HTML !!),通常不能被正则表达式识别;相反,它必须由语法解析。一个非常简单的 Recursive Descent Parser 应该足以满足您的任务;并且应该在每个称职的程序员的工具带上。
-
对了,
{0,1}可以换成?