在我看来,你的工作有一个更好的工具 - 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 语法(正则表达式)来解析 Type-0 语法 (T-SQL)。当您尝试解析 HTML时也是如此。在现实生活中,它不会是 100% 的失败证明。