使用正则表达式使用.Net从SQL语句中提取特定的select子句
我试图用正则表达式返回sql语句的一部分。例如:使用正则表达式使用.Net从SQL语句中提取特定的select子句,.net,regex,.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 我希望给定字符串(如“co
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)
但它将select语句从第2列一直返回到第5列。是否要使我的正则表达式语句变为惰性语句,并且只返回紧靠“column5”之前的select语句?您可以使用以下正则表达式:
@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$"
您可以使用以下命令访问
'select'
组:Match[“select”]。值代码>您的意思是说“…仅返回紧接在”第2列之前的select语句吗“?另外,看起来您正在尝试匹配当前正则表达式中的column5
,而column2
不在其中…”如果您询问给定示例正则表达式的预期结果,我希望该语句在第5列之前返回select语句。如果我将column5替换为column4,它应该在column4之前返回select语句,这可能是因为我不理解问题所在,但为什么不使用类似于^.*?column5
?(假设语句不跨多行)@certainperformance。是,我当前的正则表达式语句正在查找第5列之前的select语句。
new Regex(@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$", RegexOptions.IgnoreCase | RegexOptions.Multiline);