.NET正则表达式的SQL Server字符串...但不是Unicode字符串?
问题描述:
我想构建一个.NET正则表达式来匹配SQL Server常量字符串......但不是Unicode字符串。.NET正则表达式的SQL Server字符串...但不是Unicode字符串?
这里有点SQL的:
select * from SomeTable where SomeKey = 'abc''def' and AnotherField = n'another''value'
注意,在字符串中两个单引号逃逸单引号。
正则表达式应该匹配'abc''def'而不是n'another''值。
我有一个正则表达式,现在设法找到一个字符串,但它也匹配的Unicode字符串(只是N个后开始):
'('{2})*([^']*)('{2})*([^']*)('{2})*'
谢谢!
答
这种模式将做你最期待的事:
(?<unicode>n)?'(?<value>(?:''|[^'])*)'
的好处是,它应该准确地匹配任何数量的转义引号的。 (SomeKey = 'abc''''def'''
将匹配abc''''def''
。)
的缺点是它也匹配的Unicode字符串,但它抓住了龙头n
,表示它是一个Unicode字符串。处理正则表达式时,可以忽略匹配组“unicode”成功的匹配项。
的模式会为每个匹配以下组:
unicode: Success if the string is a Unicode string, fails to match if ASCII
value: the string value. escaped single quotes remain escaped
如果您使用的是.NET正则表达式,你可以添加到(?(unicode)(?<-value>))
打压匹配值的模式结束,虽然图案整体仍然会匹配。
编辑
已经想过这个问题多一些,下面的模式应该做你想要的到底是什么;它根本不会匹配Unicode字符串。但是,上述方法可能仍然更具可读性。
(?:n'(?:''|[^'])*'[^']*)*(?<!n)'(?<value>(?:''|[^'])*)'
我决定用你的( N') '((?:?'? '| [^'])*)”和MatchEvaluator处理代替我在做什么。请注意,你的第二个正则表达式匹配ansi字符串和unicode字符串。谢谢! –
user505765