博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则匹配超时处理
阅读量:5054 次
发布时间:2019-06-12

本文共 1748 字,大约阅读时间需要 5 分钟。

使用正则匹配比较大的数据时就会发生程序超时并没有异常弹出,而且电脑cpu会到达100%

在.Net4.5中微软有改进的方法,直接调用很方便,但.Net4.5以下就没有,下面写下自己找的处理方法

1、.Net4.5中:  

Regex reg = new Regex(正则, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(2));

TimeSpan.FromSeconds就是设置的超时时间,如超过就返回为空,FromSeconds=2是秒,也可以设置分钟小时

2、.Net4.0中:

1 ///  2         /// 正则解析 3 ///  4 /// 正则对象 5 /// 需要解析的字符串 6 /// 超时时间 7 /// 
8 public static MatchCollection Matchs(Regex regex, string input, int OutTimeMilliseconds) 9 { 10 MatchCollection mc = null; 11 AutoResetEvent are = new AutoResetEvent(false); 12 Thread t = new Thread(delegate() 13 { 14 mc = regex.Matches(input); 15 //注意,在这里一定要把所有的匹配项遍历一次,不然的话当在此方法外遍历的话.也可能会出现等待情况 16 foreach (Match m in mc) { } 17 are.Set(); 18 }); 19 t.Start(); 20 Wait(t, TimeSpan.FromMilliseconds(OutTimeMilliseconds), are, null); 21 return mc; 22 } 23 24 /// 25 /// 等待方法执行完成,或超时 26 /// 27 /// 28 /// 29 /// 30 private static void Wait(Thread t, TimeSpan OutTime, WaitHandle are, WaitHandle cancelEvent) 31 { 32 WaitHandle[] ares; 33 if (cancelEvent == null) 34 ares = new WaitHandle[] { are }; 35 else 36 ares = new WaitHandle[] { are, cancelEvent }; 37 int index = WaitHandle.WaitAny(ares, OutTime); 38 if ((index != 0) && t.IsAlive)//如果不是执行完成的信号,并且,线程还在执行,那么,结束这个线程 39 { 40 t.Abort(); 41 t = null; 42 } 43 } 44 45 /// 46 /// 正则解析 47 /// 48 /// 正则对象 49 /// 需要解析的字符串 50 /// 超时时间 51 ///
52 public static Match Match(Regex regex, string input, int OutTimeMilliseconds) 53 { 54 Match m = null; 55 AutoResetEvent are = new AutoResetEvent(false); 56 Thread t = new Thread(delegate() { m = regex.Match(input); are.Set(); }); 57 t.Start(); 58 Wait(t, TimeSpan.FromMilliseconds(OutTimeMilliseconds), are, null); 59 return m; 60 }

转载于:https://www.cnblogs.com/cuihongyu3503319/p/10335483.html

你可能感兴趣的文章
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>
关于页面<!DOCTYPE>声明
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
C++标准库vector使用(更新中...)
查看>>
cocos2d-x 2.2.6 之 .xml文件数据读取
查看>>
枚举的使用
查看>>
BZOJ 1531 二进制优化多重背包
查看>>
BZOJ 2324 (有上下界的)费用流
查看>>
python3基础06(随机数的使用)
查看>>
Zookeeper系列(二)特征及应用场景
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
Spring Boot使用Druid和监控配置
查看>>