RegEx用于PreparedStatements

huangapple go评论72阅读模式
英文:

RegEx for PreparedStatements

问题

以下是翻译好的部分:

我正在尝试在Java中构建解析应用程序,用于解析Oracle的预编译语句

作为概念验证,我正在尝试为上面链接中的setter方法编写一个正则表达式,例如:setString(),setInt()等等。

这些setter语句可以有2个或更多参数以及参数位置。

setDate(int parameterIndex, Date x, Calendar cal)
setInt(int parameterIndex, int x)

因此,正则表达式应能够:

  • 告诉我它是哪个setter方法
  • 获取参数位置
  • 获取关联的值(包括空/空字符串)

我尝试过以下正则表达式:

set[A-Z].+([1-9]+,.*,.*)

这部分正则表达式在某些情况下可以工作,但对于只有2个参数的情况会失败。空值也无法被识别。

英文:

I am trying to build parsing application in Java, which parses Oracle's prepared statements.

As a proof of concept, i am trying to come up with a regex for setter methods found in the above link, for example: setString() , setInt() etc..

The setter statements can have 2 or more arguments along with parameter position.

setDate(int parameterIndex, Date x, Calendar cal)
setInt(int parameterIndex, int x)

So the Regex should be able:

tell me which setter method it is 
get the parameter position
get the associated values (including blank/empty string )

I have tried with this

set[A-Z].+([1-9]+,.*,.*)

This works partially, it fails for just 2 arguments. Empty values are not recognized as well.

答案1

得分: 1

应该是这样的一个表达式:

set(\w+)((\d+)(,[^,]+)+)


1. `set(\w+)` - 查找后跟字符的“set”并将其作为第一组返回。
2. `\(....\)` - 查找 (...). `\`是转义字符。
3. `(\d+)` - 查找数字并将其作为第二组返回。
4. `,[^,]+` - 查找逗号,并找到逗号后的一个或多个除逗号外的任何字符。
5. `(,[^,]+)+` - 查找先前的逗号+非逗号组,重复1次或更多次,并将最后一个作为第三组返回。
英文:

It should be something like this one:

set(\w+)\((\d+)(,[^,]+)+\)
  1. set(\w+) - searches'set' with following characters and return following characters as a first group.
  2. \(....\) - searches (...). \ is an escape character
  3. (\d+) - finds numbers and returns it as a second group
  4. ,[^,]+ - finds , and following 1 or more any characters except comma
  5. (,[^,]+)+ - finds previous comma+not-comma groups repeated 1+ times and returns last of them as a group #3

huangapple
  • 本文由 发表于 2020年9月10日 21:47:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/63831100.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定