举例 需求描述:匹配<td>标签中的内容 源字符串:<td>This is a test line. Another line. </td> 匹配结果:<td>This is a test line. Another line. </td> 正则表达式一:<td>[\s\S]*</td> 正则表达式二:(?s)<td>.*</td> 匹配效率测试 以下为测试用字符串,即下面richTextBox1.Text里输入的内容(取自CSDN首页): 复制代码 代码如下: <link href="images/favicon.ico" rel="SHORTCUT ICON" /> <title>CSDN.NET - 中国领先的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台</title> <script language='JavaScript' type='text/javascript' src='http://www.csdn.net/ggmm/csdn_ggmm.js'></script> <script type="text/javascript" src="http://counter.csdn.net/a/js/AreaCounter.js%22%3E%3C/script> <script type="text/javascript">
测试代码: 复制代码 代码如下: # string yourStr = richTextBox1.Text; # StringBuilder src = new StringBuilder(4096); # for (int i = 0; i < 10000; i++) # { # src.Append(yourStr); # } # string strData = src.ToString(); # List<Regex> reg = new List<Regex>(); # reg.Add(new Regex(@"[\s\S]")); # reg.Add(new Regex(@"[\w\W]")); # reg.Add(new Regex(@"[\d\D]")); # reg.Add(new Regex(@"(.|\n)")); # reg.Add(new Regex(@"(?s).")); # string test = string.Empty; # Stopwatch stopW = new Stopwatch(); # foreach (Regex re in reg) # { # stopW.Reset(); # stopW.Start(); # test = strData; # test = re.Replace(test, ""); # stopW.Stop(); # richTextBox2.Text += "正则表达式:" + re.ToString().PadRight(10) + "执行时间:" + stopW.ElapsedMilliseconds.ToString() + " ms"; # richTextBox2.Text += "\n---------------------------------------\n"; # }
测试结果: 测试分两组进行,程序执行前内存占用为921M 一组是未使用量词,每次仅替换一个字符,执行时间如下,占用内存938M 复制代码 代码如下: 正则表达式:[\s\S] 执行时间:2651 ms --------------------------------------- 正则表达式:[\w\W] 执行时间:2515 ms --------------------------------------- 正则表达式:[\d\D] 执行时间:2187 ms --------------------------------------- 正则表达式:(.|\n) 执行时间:2470 ms --------------------------------------- 正则表达式:(?s). 执行时间:1969 ms
另一组使用了量词,一次替换所有字符,执行时间如下,占用内存1128M 复制代码 代码如下: 测试结果(带量词) 正则表达式:[\s\S]+ 执行时间:249 ms --------------------------------------- 正则表达式:[\w\W]+ 执行时间:348 ms --------------------------------------- 正则表达式:[\d\D]+ 执行时间:198 ms --------------------------------------- 正则表达式:(.|\n)+ 执行时间:879 ms --------------------------------------- 正则表达式:(?s).+ 执行时间:113 ms ---------------------------------------