.net - 使用正则表达式从使用 .Net 的 SQL 语句中提取特定的选择子句
问题描述
我试图想出一个正则表达式来返回 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 列。反正有没有让我的正则表达式语句变得懒惰并且只在“column5”之前返回select语句?
解决方案
您可以使用以下正则表达式:
@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$"
您应该设置'MultiLine'
和'IgnoreCase'
选项。
正则表达式从行首开始,然后创建一个命名的捕获组 ( 'select'
),该组最终将仅包含“选择”语句(在括号之间)。
然后它匹配左括号 ' (
' 后跟文本'select'
,然后是任意数量的non-right-parenthes
,然后是空格、'as'
、空格和文本'column5'
,最后是可选的逗号 ' ,
' 和行尾。
如何使用:
像这样创建你的正则表达式:
new Regex(@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$", RegexOptions.IgnoreCase | RegexOptions.Multiline);
您可以使用以下方式访问'select'
群组:Match["select"].Value;
推荐阅读
- node.js - 如何在 node.js 中设置和使用环境变量
- loops - 跳出一个循环后如何跳回一个循环 - NASM
- elasticsearch - 如何计算grafana数据源弹性中的百分比
- css - Firefox 不显示 :after 伪元素
- r - 展平R中数据框中的列表列
- python - 嵌套字典Python的逆序
- r - facet_wrap 布局类似于 facet_grid
- swift - 您是否能够跨不同的视图控制器/.swift 文件检索存储在 UserDefaults 中的数据?
- beautifulsoup - 使用 BS4 和请求发送不和谐嵌入的产品库存解析表单 HTML
- discord - PokeCord 旁边的绿条是怎么做的?