gpt4 book ai didi

sql - 使用正则表达式解析简单的查询构造

转载 作者:行者123 更新时间:2023-12-02 03:16:21 24 4
gpt4 key购买 nike

我需要解析简单的查询结构可能的选择

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}

但在我的情况下效果很奇怪

enter image description here

我希望 order by 在第 5 组中,但在我的例子中,它是第 4 组的一部分。我想要以下顺序

  • 第 1 组 - 选择单词
  • 第 2 组 - 列字符串
  • 第 3 组 - where word - 是可选的
  • 第 4 组 - 条件字符串 - 可以是可选的(如果没有)
  • 第 5 组 - order by word - 是可选的
  • 第 6 组 - 排序依据列表 - 是可选的(如果没有排序依据)

那么,有人可以指出我做错了什么吗?

最佳答案

问题出在第 4 组:(.*)

贪心 .* 吃掉整行。正则表达式要回溯匹配\s,而col1前的空格是右起第一个空格,所以匹配。所有其他组都是可选的,因此正则表达式已完成。


编辑:好的,你也想要一个正则表达式......

此正则表达式适用于所有给定的输入(可能需要调整):^(select-?[^\n]*?)(\s+[^\n]*?)?(?:\s+(where-?[^\s]*\s)([^\n]*?))?\s(?:(order\s*by-?\s)([^\n]*))?$

将其与 mg 修饰符一起使用。

它大致基于您的正则表达式,但如果需要我可以解释。

为方便起见,这里是带有命名组的相同正则表达式(需要 mgx 修饰符):^(?'select'select-?[^\n]*?)
(?'col'\s+[^\n]*?)?
(?:\s+(?'where'where-?[^\s]*\s)
(?'cond'[^\n]*?))?\s
(?:(?'order'order\s*by-?\s)(?'by'[^\n]*))?$

关于sql - 使用正则表达式解析简单的查询构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36809226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com