使用正则表达式从 C# 中的 SQL 语句中查找 SQL 函数

Posted

技术标签:

【中文标题】使用正则表达式从 C# 中的 SQL 语句中查找 SQL 函数【英文标题】:Find SQL function from SQL statement in C# using regex 【发布时间】:2014-10-05 20:11:13 【问题描述】:

我想解析一个可能在查询文本中使用 SQL 函数的 SQL 语句。现在使用 C# 正则表达式,我想解析字符串并检查查询中是否使用了任何函数名称并提取它们。查询中可能使用了多个函数,每个函数可以有 n 数量的参数,这些参数是事先不知道的。

select * from fnTest(@A, @B) 
select x.* from fnTest(@A, @B) x join fnHelloWord(@C, @D, @E) y on x.SomeID = y.OtherID
在第一个示例中,正则表达式将返回字符串值 fnTest。 在第二个示例中,正则表达式将返回函数名称字符串列表,例如 fnTestfnHelloWord

【问题讨论】:

【参考方案1】:

如果你的字符串和你展示的一样,那么你可以使用这样的正则表达式:

\w+(?=\()

Working demo

顺便说一句,如果您想获取正则表达式内容,请使用以下捕获组:

(\w+)(?=\()

比赛信息:

MATCH 1
1.  [14-20] `fnTest`
MATCH 2
1.  [46-52] `fnTest`
MATCH 3
1.  [68-79] `fnHelloWord`

【讨论】:

【参考方案2】:

要添加到Fede's answer,您可能还需要在函数名称和左括号之间留出一定数量的空格。

例如\w+\s*(?=\()

【讨论】:

【参考方案3】:

使用this 正则表达式:

@"([a-zA-Z0-9_]*)\([^\)]*\)"

基本上([a-zA-Z0-9]*) 匹配标识符(az、AZ 或 0-9)并捕获它,\( 匹配左括号,[^\)]* 匹配任意数量的不是右括号的事物,最后是 @ 987654327@ 匹配右括号。

或者,您可以使用this 正则表达式:

@"(\w*)\([^\)]*\)"

因为\w 匹配[a-zA-Z0-9_]

【讨论】:

以上是关于使用正则表达式从 C# 中的 SQL 语句中查找 SQL 函数的主要内容,如果未能解决你的问题,请参考以下文章

数据库笔记-SQL过滤(LIKE&正则表达式)

如何使用 C# 和正则表达式从 sql 查询创建模板?

使用正则表达式查找 C# 样式的未转义字符串

C# 正则提取sql语句字符串里的字段名

在 oracle 中使用正则表达式查找 POBOX - PL/SQL

SQL 注释中的 Java 正则表达式查找/替换模式