正则表达式提取where子句参数化列

时间:2017-07-12 13:47:55

标签: regex

如何使用下面的sql string中的regex提取参数化列:

select * from table1 
where column1 = ?1 
and column2 = 'a' 
and column3 like ?2 or column3 > ?3

从上面的sql正则表达式捕获组应该返回:

column1 = ?1
column3 like ?2
column3 > ?3

我不想使用任何完整的sql解析器。我只需要比较的列的名称(<>=likenot like!=)参数?1>2

2 个答案:

答案 0 :(得分:0)

这是建议:

(\w+)\s+(?:(not\s+)?like|=|>|<)\s+\?\d+

<强>解释

  • (\w+)\s+任何字母数字字符后跟空格
  • (?:(not\s+)?like|!?=|>|<)\s+接受运算符后跟空格
  • \?\d+参数化列(a ?后跟数字)

此正则表达式的第一组从输入中提取列名称:

column1
column3
column3

完整组提取整个条件:

column1 = ?1 
column3 like ?2
column3 > ?3

Test it on regex101

答案 1 :(得分:0)

由于没有理由相信你在子串之间有多个空格,并且因为你说你正在寻找以?>开头的参数,这是一个针对准确性,效率而优化的模式,简洁:

\w+ (?:[<=>]|!=|(?:not )?like) [?>]\d+

Demo