使用正则表达式从 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
。
在第二个示例中,正则表达式将返回函数名称字符串列表,例如 fnTest
和 fnHelloWord
【问题讨论】:
【参考方案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 函数的主要内容,如果未能解决你的问题,请参考以下文章