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

lzg2111

lzg2111

2016-02-19 17:58

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

  方法一:使用正则表达式

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

   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();

                  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 />

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

正则算法

10个汉字/ 980

100个汉字/999

1000个汉字/1234

普通算法

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

10个汉字/ 234

100个汉字/234

1000个汉字/265

  

展开更多 50%)
分享

猜你喜欢

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

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

用正则表达式过滤html代码

Web开发
用正则表达式过滤html代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

正则表达式过滤html标签对

Web开发
正则表达式过滤html标签对

正则表达式过滤html的标签对

Web开发
正则表达式过滤html的标签对

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

c#中过滤html的正则表达式

Web开发
c#中过滤html的正则表达式

正则表达式

Web开发
正则表达式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

TCanvas

TCanvas

Win7怎么安装?推荐3种Windows7安装方法

Win7怎么安装?推荐3种Windows7安装方法
下拉加载更多内容 ↓