如何使用下面的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解析器。我只需要比较的列的名称(<
,>
,=
,like
,not like
,!=
)参数?1
,>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
答案 1 :(得分:0)
由于没有理由相信你在子串之间有多个空格,并且因为你说你正在寻找以?
或>
开头的参数,这是一个针对准确性,效率而优化的模式,简洁:
\w+ (?:[<=>]|!=|(?:not )?like) [?>]\d+