首页  ·  知识 ·  编程语言
用正则表达式来过滤脏数据
yamajia  http://www.cnblogs.com/yamajia/archive/2007/11/13/  .NET  编辑:dezai  图片来源:网络
方法一:使用正则表达式 1//脏字典数据存放文件路径 2 private static string FILE_NAME="zang.txt";
方法一:使用正则表达式
  
   1//脏字典数据存放文件路径
   2 private static string FILE_NAME="zang.txt";
   3 //脏数据字典表,如:脏数据一|脏数据二|脏数据三
   4 public static string dirtyStr="";
   5
   6 public ValidDirty()
   7 {
   8 if (HttpRuntime.Cache["Regex"]==null)
   9 {
  10 dirtyStr=ReadDic();
  11 //用于检测脏字典的正则表达式
  12 Regex validateReg= new Regex("^((?!"+dirtyStr+").(?  13 HttpRuntime.Cache.Insert("Regex" ,validateReg,null,DateTime.Now.AddMinutes(20) ,TimeSpan.Zero);
  14 }
  15
  16 }
  17 private string ReadDic()
  18 {
  19 FILE_NAME=Environment.CurrentDirectory+"\\"+FILE_NAME;
  20
  21 if (!File.Exists(FILE_NAME))
  22 {
  23 Console.WriteLine("{0} does not exist.", FILE_NAME);
24 return "";
  25 }
  26 StreamReader sr = File.OpenText(FILE_NAME);
  27 String input="";
  28 while (sr.Peek() > -1)
  29 {
  30 input += sr.ReadLine() ;
  31 }
  32
  33 sr.Close();
  34 return input;
  35
  36 }
  37
  38
  39 public bool ValidByReg(string str)
  40 {
  41 Regex reg=(Regex)HttpRuntime.Cache["Regex"];
  42 return reg.IsMatch(str) ;
  43
  44 }
  
  感觉这种方法的执行效率不是很高,简单的测试了一下 1000字的文章,脏字典有800多个关键字
  式了一下是 1.238秒,大家有没有更好的方法,请不吝赐教!
方法二:普通循环查找方法
  
   public bool ValidGeneral(string str)
   {
  
   if(!File.Exists(FILE_NAME))
   {
   Console.WriteLine("文件路径或者文件路径不存在错误信息") ;
   return false;
   }
   else
   {
   StreamReader objReader = new StreamReader(FILE_NAME,System.Text.Encoding.GetEncoding("gb2312"));
   string sLine="";
   ArrayList arrText = new ArrayList();
  
   while (sLine != null)
   {
   sLine = objReader.ReadLine();
   if (sLine != null)
   arrText.Add(sLine);
  
   }
   objReader.Close();
foreach (string sOutput in arrText)
   {
   string[] strArr=sOutput.Split('|');
  
   for (int i = 0; i < strArr.Length; i++)
   {
   if (str.IndexOf(strArr[i])!=-1)
   {
   return false;
   }
  
   }
  
   }
   return true;
  
   }
  
   }
  
  以下是测试的方法,有什么问题还大家请指出!
  
   1DateTime t1 =DateTime.Now;
   2 string str="213";
3 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   4 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   5 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   6 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   7 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   8 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
   9 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  10 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  11 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  12 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  13 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  14 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  15 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  16 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  17 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  18 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  19 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  20 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  21 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  22 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  23 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  24 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  25 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  26 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  27 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
 53 ValidDirty vd=new ValidDirty() ;
  54 Console.WriteLine(vd.ValidByReg(str)) ;
  55 DateTime t2 =DateTime.Now;
  56 TimeSpan ts=t2-t1;
  57 Console.WriteLine(ts.TotalMilliseconds) ;
  58 Console.Read() ; 本文作者:yamajia 来源:http://www.cnblogs.com/yamajia/archive/2007/11/13/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读