使用正则表达式使用.Net从SQL语句中提取特定的select子句

时间:2018-10-29 22:47:30

标签: .net regex

我正试图提出一个正则表达式以返回sql语句的一部分。一个例子:

a.column1,
(select b.column1, 
b.column2, etc) as column2,
a.column3
(select c.column1, etc) as column4,
(select d.column1, 
d.column2, 
d.column3, etc) as column5,
a.column6,
(select e.column1, etc) as column7

我想要给定的字符串(例如“ column5”)返回生成column5“ select d.column1”等的select语句。我尝试了以下操作:

\(((?:.|\n)*?)\)(?=\s{1,}AS\scolumn5)

,但是它从第2列一直返回到第5列的select语句。无论如何,有没有让我的regex语句变得懒惰并且仅在“ column5”之前立即返回select语句?

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$"

您应该设置'MultiLine''IgnoreCase'选项。

正则表达式从行首开始,然后创建一个命名捕获组('select'),该捕获组最终将仅包含“ select”语句(在括号之间)。

然后,它与左括号'('相匹配,后跟文本'select',后跟任意数量的non-right-parenthes,后跟空白'as',空格和文本'column5',最后是一个可选的逗号','和行尾。

使用方法

像这样创建您的正则表达式:

new Regex(@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$", RegexOptions.IgnoreCase | RegexOptions.Multiline);

您可以使用'select'

来访问Match["select"].Value;组。