关于脏字典过滤问题-用正则表达式来过滤脏数据

2016-02-19 17:58 38 1 收藏

下面是个简单易学的关于脏字典过滤问题-用正则表达式来过滤脏数据教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - Web开发 】

  方法一:使用正则表达式

   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+").(?!"+dirtyStr+"))*$",RegexOptions.Compiled|RegexOptions.ExplicitCapture);   
  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();

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

                  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+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  28            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  29            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  30            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  31            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  32            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  33            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  34            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  35            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  36            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  37            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  38            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  39            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  40            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  41            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  42            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  43            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  44            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  45            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  46            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  47            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  48            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  49            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  50            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  51            str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
  52            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() ;

  

算法?XML:NAMESPACE PREFIX = O />

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

检索文本文件长度 / 耗费时间(ms)

正则算法

10个汉字/ 980

100个汉字/999

1000个汉字/1234

普通算法

10个汉字/ 234

100个汉字/234

1000个汉字/265

  

来源:https://www.tulaoshi.com/n/20160219/1616517.html

延伸阅读
标签: Web开发
正则表达式的功能实在太强大了~以下为找到的一个关于正则表达式基本语法的介绍: 首先让我们看两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"...
标签: Web开发
一、正则表达式概述  二、正则表达式在VBScript中的应用  三、正则表达式在VavaScript中的应用  四、示例   一、正则表达式概述  如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。  请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字...
标签: Web开发
最后写了一个IP地址的正则表达式验证程序。 代码如下: ((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d) 截图如下:
标签: ASP
       最近很多帖子问如何将内容从数据库取出后换行,这就要用到正则表达式。简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在许多编程语言中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也...
标签: ASP
  14.后向引用 正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表 达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对这部分正则表达式的保存。 所捕获的每个子匹配都按照在正则表达式模式中...

经验教程

910

收藏

32
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部