请考虑以下2个SQL条件。
1。)AssetView.[PROPTYPE] NOT IN ('B15/30','SFD','SFA')
2。)AssetView.[FICO] IN (500,600,700)
我想使用RegEx打破此SQL,以便可以将表名称,字段名称,函数类型和字段值分为4个不同的部分。
例如
这是我尝试过的正则表达式(https://rubular.com/r/WGiyz0oGrooyiA),但是我无法将TableName,Field Name和Function类型拆分为自己的组。
(.*?)[^=]['(]+(.*?)[')]
答案 0 :(得分:1)
在模式(.*?)[^=]['(]+(.*?)[')]
中,您使用字符类['(]
和[')]
,它们与列出的任何字符相匹配,并且还可以首先与开头'
相匹配,然后与关闭)
对于示例数据,您可以使用:
(\w+)\.\[(\w+)\] +(\w+(?: \w+)*) +\(([^)\n]+)\)
(\w+)
在组1中捕获1个以上的字符字符\.
匹配一个点\[(\w+)\] +
在第2组和1+个空格的方括号之间捕获1个以上的字符字符(\w+(?: \w+)*) +
捕获1个以上的字符字符,然后重复0+次匹配一个空格的字符,并重复第3组和1+个空格中的1+个字符字符\(([^)\n]+)\)
捕获1+次而不是第4组中的右括号或右括号之间的换行符Rubular regex | .NET regex (单击“表格”标签)
如果要匹配的字符数多于\w
,则可以使用字符类扩展该字符数。
例如,如果您还想允许使用连字符和空格,请使用[\w-]+
,或者如果要匹配所有括号之间的字符,则可以使用否定字符类,例如\[([^\]]+)\]
< / p>