1

我希望能够在 SQL 语句中找到绑定变量(以冒号开头,然后是文本):

SELECT * 
FROM TABLE 
WHERE TABLE_UID = :TABUID AND TABLE_TEXT = :TEXT

我发现这个正则表达式可以找到绑定变量:

Regex reg = new Regex(":[\\w]*",
                      RegexOptions.Multiline & RegexOptions.IgnoreCase); 

foreach (Match m in reg.Matches(sql)) 
{
    bindVar.Add(m.Value); 
}

我无法弄清楚的是如何忽略引号中存在的潜在绑定变量:

SELECT * 
FROM TABLE 
WHERE TABLE_UID = :TABUID AND TABLE_TEXT = TO_DATE(:TEXT, 'hh:mi:ss')

:mi & :ss 不应在正则表达式中匹配。

4

3 回答 3

2

对于使用正则表达式来做你想做的事情的智慧,我有点动摇,但如果我是你,我会

  • 复制您的输入字符串
  • 去掉输入字符串中不需要的内容(在这种情况下,引号内的内容)
  • 现在您不必担心引号中的内容
于 2013-01-07T21:10:29.440 回答
0

使用单词边界 \b

\\b:[\\w]*
于 2013-01-07T21:13:21.697 回答
0

这将匹配任何未包含在单引号中的内容:

(?<![\\S'])([^'\\s]+)(?![\\S'])

我不够精明,不知道如何将它与你已经拥有的东西结合起来。

于 2013-01-07T22:19:24.040 回答