您的位置:首页 > 其它

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

2007-09-26 09:06 423 查看
方法一:使用正则表达式

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;




}




}

以下是测试的方法,有什么问题还大家请指出!

1

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

[align=center]算法[/align]
[align=center]检索文本文件长度 / 耗费时间(ms)[/align]
[align=center]正则算法[/align]
10个汉字/ 980
100个汉字/999
1000个汉字/1234
[align=center]普通算法[/align]
10个汉字/ 234
100个汉字/234
1000个汉字/265
脏字典下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: