程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 髒字典過濾:用正則表達式來過濾髒數據

髒字典過濾:用正則表達式來過濾髒數據

編輯:.NET實例教程


方法一:使用正則表達式

1//髒字典數據存放文件路徑 
2 private static string FILE_NAME="zang.txt"; 
3 //髒數據字典表,如:髒數據一|髒數據二|髒數據三 
4 public static string dirtyStr=""; 

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

算法 

檢索文本文件長度 / 耗費時間(ms) 

正則算法 

10個漢字/ 980 
100個漢字/999 
1000個漢字/1234 

普通算法 

10個漢字/ 234 
100個漢字/234 
1000個漢字/265

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved