我正试图提出一个正则表达式以返回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语句?
答案 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;
组。