java - 使用正则表达式获取 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 检索变量的正则表达式?
解决方案
以下正则表达式对我有用。
\b(group\s+by\s+)(.+?)([\s;]|$)
我摆脱了几个不必要的群体。您的版本使整个GROUP BY xxx
表达式可选,因此它在不存在时匹配。
我使用\b
在开头匹配单词边界,而不是可选的空格。
我使用.+?
而不是.*?
匹配被分组的标识符,因此它将匹配至少一个字符。
然后我在它之后匹配空格、或字符串的结尾,因此如果子句位于查询的末尾或后面跟着其他内容;
,它将匹配。GROUP BY
我不能\b
在这里使用,因为标识符可能包含.
,这是一个单词边界。
推荐阅读
- java - 只是一个关于逻辑的小问题。为什么这些是等价的?
- java - 打开失败:EACCES(权限被拒绝)?
- cuda - 为什么我们不能拆分 __host__ 和 __device__ 实现?
- javascript - 质数函数中的错误数字
- postgresql - Flutter + Dart App 和 Postgres 数据库的连接和查询
- c# - 如何检查网站/php 文件中的每一行并启用/禁用组件 C#
- c# - 如何在单个视图中使用多个布局
- c# - 使用时如何确定是否需要在 MySqlConnection 中调用 Close()?
- c - 找到最大的价值
- reactjs - React 站点警告:href 属性需要一个有效的地址。提供一个有效的、可导航的地址作为 href 值 jsx-a11y/anchor-is-valid