首页 > 解决方案 > 使用正则表达式获取 SQL 变量

问题描述

我正在尝试使用正则表达式来获取部分 SQL 的变量,例如:

from Person p group by p.lastname order by p.firstname

正则表达式是

(\\s?((group\\s+by\\s+)(.*?\\s+))?(.*))

但是,这不适用于此 SQL

from Person p group by p.lastname

我的问题是,它是否存在一个可以GROUP BY为各种 SQL 检索变量的正则表达式?

标签: javaregexspring-data-jpa

解决方案


以下正则表达式对我有用。

\b(group\s+by\s+)(.+?)([\s;]|$)

我摆脱了几个不必要的群体。您的版本使整个GROUP BY xxx表达式可选,因此它在不存在时匹配。

我使用\b在开头匹配单词边界,而不是可选的空格。

我使用.+?而不是.*?匹配被分组的标识符,因此它将匹配至少一个字符。

然后我在它之后匹配空格、或字符串的结尾,因此如果子句位于查询的末尾或后面跟着其他内容;,它将匹配。GROUP BY我不能\b在这里使用,因为标识符可能包含.,这是一个单词边界。

演示


推荐阅读