2017-02-22 22 views
-3

я написал следующее регулярное выражение для извлечения SQL Statement из строкиRegex для извлечения SQL заявления в C#

((?:SELECT|INSERT)[\s\S]*?\;) 

Это работает нормально, но это захватывая последние котировки и точку с запятой, а я хочу строку в кавычках? Любая помощь будет оценена

Output Snapshot

+0

Предполагается, что это код C#, на котором запущено регулярное выражение? Если так, то, кажется, отсутствуют пропущенные знаки для объединения этих строк вместе. – juharr

ответ

1

Вы можете использовать предпросмотр, чтобы избежать этого.

((?:SELECT|INSERT)[\s\S]*?)(?=";) 

Используя этот положительный предпросмотр (?=";) он гарантирует, что ваше регулярное выражение заканчивается до того, что ";, и он не будет захватывать в вашей группе.

+0

спасибо, что это сработало :) – muski

0

Regexp:

(?:SELECT|INSERT)[\s\S]*?(?=\"|\;) 

Входной сигнал:

"SELECT DISTINCT " 
"SELECT DISTINCT " 
"SELECT DISTINCT " 
"SELECT DISTINCT "; 

Выход: (Пример ...)

SELECT DISTINCT 
SELECT DISTINCT 
SELECT DISTINCT 
SELECT DISTINCT 

C# Код:

using System; 
using System.Text.RegularExpressions; 

public class Example 
{ 
    public static void Main() 
    { 
     string pattern = @"(?:SELECT|INSERT)[\s\S]*?(?=\""|\;)"; 
     string input = @"""SELECT DISTINCT "" 
""SELECT DISTINCT "" 
""SELECT DISTINCT "" 
""SELECT DISTINCT "";"; 
     RegexOptions options = RegexOptions.Multiline; 

     foreach (Match m in Regex.Matches(input, pattern, options)) 
     { 
      Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index); 
     } 
    } 
} 

См.: https://regex101.com/r/rzBTpo/2