在我看來,對於你的工作更好的工具 - TSql100Parser類:
using Microsoft.Data.Schema.ScriptDom;
using Microsoft.Data.Schema.ScriptDom.Sql;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Program
{
static void Main(string[] args)
{
IList<ParseError> errors = new List<ParseError>();
var tsql = @"
Insert into SomeTable (someColumns)
values ('someValue1',
N'someValue2',
'someValue3',
'some '' escaped')";
var result = GetLiterals(tsql);
}
private static List<string>
GetLiterals(string strQuery)
{
var parser = new TSql100Parser(false);
IList<ParseError> errors = new List<ParseError>();
var result =
parser.GetTokenStream(new StringReader(strQuery), errors);
return result
.Where(t =>
t.TokenType == TSqlTokenType.AsciiStringLiteral ||
t.TokenType == TSqlTokenType.UnicodeStringLiteral)
.Select(t => t.Text)
.ToList();
}
}
您不能使用Type-3語法(正則表達式)來分析類型0語法(T-SQL)。當您嘗試parse HTML時也是如此。它在現實生活中不會100%失敗。
有些東西告訴我最好在沒有REGEX的情況下解決這個問題。 – GolfWolf