【发布时间】:2020-12-10 00:06:38
【问题描述】:
我有以下正则表达式:
(?!SELECT|FROM|WHERE|AND|OR|AS|[0-9])(?<= |^|\()([a-zA-Z0-9_]+)
我正在匹配这样的字符串:
SELECT Static AS My_alias FROM Table WHERE Id = 400 AND Name = 'Something';
这已经完成了我想要的 90%。我还喜欢做的是排除AS My_alias,其中别名可以是任何单词。
我尝试将其添加到我的正则表达式中,但这不起作用:
(?!SELECT|FROM|WHERE|AND|OR|AS [a-zA-Z0-9_]+|[0-9])(?<= |^|\()([a-zA-Z0-9_]+)
^^^^^^^^^^^^^^^^
this is the new part
如何使用我的正则表达式排除这部分字符串?
正则表达式的演示可以找到here
【问题讨论】:
-
你不能使用sql parser?
-
至于正则表达式,我想你可以使用
\b(?<!\bAS\s+)(?!(?:SELECT|FROM|WHERE|AND|OR|AS)\b)(?<=[ ^(])[A-Za-z_]\w* -
我同意上述建议。即使我们为您当前的正则表达式提供补丁,它仍然非常简单,并且对于许多其他类型的查询会失败。在此处编写/使用解析器以获得最佳结果。
标签: c# .net regex regex-lookarounds