[英]Regex search keyword in parentheses
我想在括号中搜索关键字GROUP BY。
这是我的正则表达式模式:
(?i)(\s+|^)\(\s*((.|\n)*)GROUP\s+BY\s+((.|\n)*)\s*\)
但是,它匹配所有数字,以防万一(..GROUP BY ..)用另一个括号括起来。
示例,这是文本模式:
(SELECT Col1 FROM Table_Name A WITH(NOLOCK) WHERE Col1>0 GROUP BY Col1)
(SELECT column1, column2
FROM Table_name1)
INNER JOIN (
SELECT column1, column2
FROM Table_name2
WHERE column1 > 0
GROUP BY column1, column2
) AS TN
我想匹配(SELECT column1, column2 FROM Table_name2 WHERE column1 > 0 GROUP BY column1, column2 )
。 但它匹配所有。
如果我们没有嵌套的查询/括号,我猜这个带有i
标志的简单表达式可能会起作用:
(\([^)]*?\bgroup\b\s+\bby\b[^)]*?\))
我们也许可以进一步简化它。 否则,为其设计表达式将非常复杂。
该表达式在此演示的右上方面板上进行了说明,如果您想进一步探索或修改它,并且在此链接中 ,您可以根据需要逐步观察它如何与某些示例输入匹配。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\([^)]*?\bgroup\b\s+\bby\b[^)]*?\))";
string input = @"(SELECT column1, column2
FROM Table_name1)
INNER JOIN (
SELECT column1, column2
FROM Table_name2
WHERE column1 > 0
GROUP BY column1, column2
) AS TN
(SELECT column1, column2
FROM Table_name1)
INNER JOIN (
SELECT column1, column2
FROM Table_name2
WHERE column1 > 0
GROUP BY column1, column2
) AS TN";
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
jex.im可视化正则表达式:
为什么不使用最简单的版本进行操作:
\([^(]*GROUP BY[^)]*\)
这将完全提取您要查找的内容; 即带有GROUP BY
子句的子查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.