Если бы у нас не было вложенных запросов / скобок, я предполагаю, что это простое выражение с флагом i
может работать:
(\([^)]*?\bgroup\b\s+\bby\b[^)]*?\))
и мы могли бы еще больше упростить это. В противном случае было бы довольно сложно разработать выражение для.
Выражение объяснено в верхней правой части этой демонстрации , если вы хотите продолжить изучение или изменить его, а в этой ссылке вы можете посмотреть, как она будет соответствовать если хотите, с некоторыми примерами ввода шаг за шагом.
Test
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 Circuit
jex.im визуализирует регулярные выражения:
![enter image description here](https://i.stack.imgur.com/fdWQo.png)