regex - C# 正则表达式提取 SQL 条件中的字段名称和值
问题描述
考虑以下 2 个 SQL 条件。
1.)AssetView.[PROPTYPE] NOT IN ('B15/30','SFD','SFA')
2.)AssetView.[FICO] IN (500,600,700)
我想使用 RegEx 打破这个 SQL,这样我就可以将表名、字段名、函数类型和字段值分成 4 个不同的部分。
例如
- 表名 - AssetView
- 字段名称 - PROPTYPE
- 功能 - 不在
- 字段值(一起或单独):B15/30、SFD、SFA
这是我尝试过的正则表达式(https://rubular.com/r/WGiyz0oGrooyiA),但我无法将表名、字段名和函数类型拆分为自己的组。
(.*?)[^=]['(]+(.*?)[')]
解决方案
在您的模式(.*?)[^=]['(]+(.*?)[')]
中,您使用一个字符类['(]
,[')]
它匹配任何列出的,也可以先匹配一个开头'
然后再匹配一个结尾)
对于您的示例数据,您可以使用:
(\w+)\.\[(\w+)\] +(\w+(?: \w+)*) +\(([^)\n]+)\)
(\w+)
在第 1 组中捕获 1+ 个单词字符\.
匹配一个点\[(\w+)\] +
在第 2 组的方括号和 1+ 个空格之间捕获 1+ 个单词字符(\w+(?: \w+)*) +
捕获 1+ 个单词字符,然后在第 3 组和 1+ 个空格中重复 0+ 次匹配空格和 1+ 个单词字符\(([^)\n]+)\)
捕获 1+ 次而不是第 4 组括号之间的右括号或换行符
正则表达式| .NET 正则表达式 (单击表选项卡)
如果您想允许更多的字符匹配,\w
那么您可以使用字符类扩展它。
例如,如果您还想允许使用连字符和空格[\w-]+
,或者如果您想匹配括号之间的所有内容,您可以使用否定字符类,例如\[([^\]]+)\]
推荐阅读
- javascript - body.req 被拆分为多个日志
- windows - 为什么wsl2 wslconfig文件不起作用?
- java - 如何创建一种方法来生成所有可能的布尔函数?
- swift - swift中的标注按钮和firestore出现问题
- rx-java - RxJava - 在 map 和 doOnSuccess 中执行长时间运行任务的任何问题
- php - PHP | 未在数据库中加载 CSV 数据
- html - HTML的value属性如何标签工作?
- firebase - Firebase 翻译文本扩展 - 是否可以翻译嵌套集合中的字段?
- java - 我在没有“catch”、“finally”或资源声明的情况下遇到错误,我该如何在下面的代码中解决这个问题
- rust - 是否可以仅使用“macro_rules!”来实现这个宏?