Regex c#匹配模式和忽略引号中的匹配
本文关键字:模式 Regex | 更新日期: 2023-09-27 17:50:59
我希望能够在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')
:小姐,:ss不能在正则表达式中匹配
关于使用正则表达式来做你想做的事情的智慧,我有点动摇,但如果我是你,我会
- 复制输入字符串
- 去掉输入字符串中不想要的内容(在本例中是引号内的内容)
- 现在你不必担心引号里的内容
使用文字边界'b
''b:[''w]*
这将匹配任何没有被单引号括起来的内容:
(?<![''S'])([^'''s]+)(?![''S'])
我还不够聪明,不知道如何把它和你已经有的东西结合起来。