繁体   English   中英

括号中的正则表达式搜索关键字

[英]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);
        }
    }
}

RegEx电路

jex.im可视化正则表达式:

在此处输入图片说明

为什么不使用最简单的版本进行操作:

\([^(]*GROUP BY[^)]*\)

这将完全提取您要查找的内容; 即带有GROUP BY子句的子查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM