/* * Sql脚本压缩类。 * 去掉sql语句中多余的空格,以减少sql脚本的文本长度 * * Author : goldli@163.com * DateTime : 2015/07/03 */ using System.Text.RegularExpressions; namespace Sp.Net.Tools { internal class SqlCompressor { public static string Compress( string source) { if ( string .IsNullOrEmpty(source)) return " 无数据 " ; // 1.去掉所有注释; 行注释 与 块注释 source = LineComment(source); source = BlockComment(source); // 2.压缩空格 source = MultipleSpace(source); // 3.压缩标点符号 source = Punctuates(source); return source; } /// <summary> /// 去掉行注释 /// </summary> /// <param name="source"></param> /// <returns></returns> private static string LineComment( string source) { // 去掉 "--" 开头的行 var x = Regex.Replace(source, " --.* " , "" , RegexOptions.IgnoreCase | RegexOptions.Multiline); return x; } private static string BlockComment( string source) { // 去掉 "/* */" 的行 var x = Regex.Replace(source, @" \/\*.*\*\/ " , "" ,RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline); return x; } private static string MultipleSpace( string source) { var x = Regex.Replace(source, @" \s{2,} " , " " ,RegexOptions.IgnoreCase | RegexOptions.Multiline); return x; } /// <summary> /// 空格在标点符号的两侧 /// </summary> /// <param name="source"></param> /// <returns></returns> private static string Punctuates( string source) { var x = Regex.Replace(source, @" \s*([\)\(\,\;\.\:\'\""\=\+\-\*\/\>\<\!\|\~\^])\s* " , " $1 " ,RegexOptions.IgnoreCase | RegexOptions.Multiline); return x; } } }