要在SQL字符串的值中查找的RegExp
我编写了一个RegExp来捕获SQLJDBC查询的所有参数和关联值 我正在用这个要在SQL字符串的值中查找的RegExp,sql,regex,jdbc,sql-in,Sql,Regex,Jdbc,Sql In,我编写了一个RegExp来捕获SQLJDBC查询的所有参数和关联值 我正在用这个 (?:\S+\s)?\S*"myOperatorHere\S*(?:\s\S+)? 这样我就可以捕获如下参数:其中c.value=32 我可以得到c值和32 它与所有操作员都能很好地工作,除了在 我想知道c值在3,4,5,6中的位置 但是通过这个表达式,我得到了3,作为一个值,而不是3,4,5,6 例如,如果我有查询: SELECT C.NAME, C.FIRSTNAME FROM CUSTOMER C, PRO
(?:\S+\s)?\S*"myOperatorHere\S*(?:\s\S+)?
这样我就可以捕获如下参数:其中c.value=32
我可以得到c值和32
它与所有操作员都能很好地工作,除了在
我想知道c值在3,4,5,6中的位置
但是通过这个表达式,我得到了3,作为一个值,而不是3,4,5,6
例如,如果我有查询:
SELECT C.NAME, C.FIRSTNAME FROM CUSTOMER C, PROSPECT P WHERE C.ID = 32 AND C.TRUC = 28 AND P.ID < 12 AND P.A IN (2, 3, 4)
我想得到C.ID=32,C.trc=28,p.ID<12,p.A在2,3,4中
你能帮我处理一下吗?如果需要,我可以使用两个表达式。我想您可以打开第二组中有效字符的范围。 我还写了您的操作员列表中的所有选项 模式分解:
(?: #non-capture group
\S+\s #1 or more non-white characters then a white character
)? #end non-capture group, zero or one occurrence of the group
\S* #zero or more non-white characters
(?: #non-capture group
IN|[<=>]+ #literally match "IN" or one or more of any operator symbols in range
) #end non-capture group
\s #whitespace character
(?: #non-capture group
(?: #non-capture group
\([^)]+\) #open parenthesis, anything not a close parathensis, close parenthesis
) #end non-capture group
| #or
\S+ #one or more non-whitespace characters
) #close non-capture group
编辑:我能够在不破坏输出的情况下从模式中删除一些步骤和字符:
\S+ (?:IN|[<=>]+) (?:\([^)]+?\)|\S+)
这将符合你所要求的一切
我相信,你实际上对这样的输入有问题,3,4,5,6中的c.value注意逗号后面的空格 如果是这样的话,我建议使用两种模式,一种用于标量值,另一种用于列表,并使用更改匹配其中任何一种。后者可以定义为由逗号和一些可选空格分隔的非空格序列,以及由括号包围的整个列表,即.\s*\s+\s*?:,\s*\s+\s**\。整个正则表达式:
(?:\S+\s)?\S*"myOperatorHere\S*(?:\s(?:\(s*\S+\s*(?:,\s*\S+\s*)*\)|\S+))?
演示:谢谢你的工作。但我在问题描述中添加的SQL示例并不适用,这很好。非常非常感谢,谢谢。当in值中没有空格时,此选项有效。我在用=或<或@Gilles:oops,我的错,对不起。备选方案应先有列表,然后是\S+。修正了答案。非常感谢
(?:\S+\s)?\S*"myOperatorHere\S*(?:\s(?:\(s*\S+\s*(?:,\s*\S+\s*)*\)|\S+))?