【问题标题】:regexp for sql analysis用于sql分析的正则表达式
【发布时间】:2017-04-06 18:45:03
【问题描述】:

我正在尝试为 java 找到一个正则表达式,它匹配所有 select 语句查询,这些查询不是由插入、更新、删除、过程等关键字开头的:

此时此刻:

^(?!insert|delete|update|procedure) {0,}select.*?;$ gims

但如果选择从新行开始,则不匹配:

测试用例:

select 1 from dual;
delete from table where id = 
(
select 1 from dual
);
update table set id = 1 where id in (
select 1 from dual);
procedure dsdsd select fdsfds;
PROCEDURE myproc ()
IS
BEGIN
SELECT
 1 from dual;
END myproc ;

结果:仅匹配 select 1 from dual;

此链接有测试用例:

https://regex101.com/r/2wkbOk/1

【问题讨论】:

  • 对不起,我不明白你的意思(不同的选择语句)。你能举一些例子吗?
  • 你期待什么输出?
  • 只匹配选择1 from dual;

标签: java sql regex


【解决方案1】:

“多行”参数独立考虑每一行,因此在您当前的搜索中不考虑其他行的内容。我相信您正在寻找的更多的是跨行搜索,以便考虑之前行上的陈述。尝试使用 [\s\S] 而不是“.”的方法

参考: How to use JavaScript regex over multiple lines?

【讨论】:

猜你喜欢
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2015-03-26
  • 2019-01-01
  • 2013-12-31
  • 2012-07-01
相关资源
最近更新 更多