首页  ·  知识 ·  编程语言
用正则表达式来过滤脏数据
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
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读