使用正则表达式解析select语句(用于自定义SQL解析器)

时间:2016-12-07 11:07:57

标签: sql regex parsing

我这样做是为了教学目的(构建教学数据库;构建它的一部分就像成熟的数据库一样;这是一个非常简单的查询解析器。)

我试图解析简单的"选择"声明使用正则表达式。它适用于大多数简单的情况,但我在选择表之间允许空间(来自a,b; )之间的平衡失去它,允许from和终结符之间的无限空间; ,并允许可选的限制器" 其中" from a,b where ;

之间的无限空格

这是正则表达式:

select\s(.*)\sfrom(.*)\s(where (.*))?\s;

以下是示例查询:

select a.a,b.b,c from a,b where a.a = b.a;

select a.a,b.b,c from a,b;

select a.a,b.b,c from a,b ;

select a.a,b.b,c from a,b where a.a = b.a  ;

regex 101上可用于单元测试。

2 个答案:

答案 0 :(得分:1)

正则表达式select\s+(.*)\s+from\s+(.*)\s*(where .*)?;通过了所有测试。我添加的唯一修改是\s+而不是单个空格\s

答案 1 :(得分:1)

这适用于提供的示例:select\s+(.*?)\s*from\s+(.*?)\s*(where\s(.*?)\s*)?;

见这里:https://regex101.com/r/sBwpok/3