正则表达式导致程序失去响应
@"[\s\S]*?(?<content>\<div id='Content'\>\<div[\s\S]*?\<\/div\>[\s\S]*?\<\/div\>)[\s\S]*";
上边是我写的一个正则表达式,然后匹配一段文本,因为文本中实际不存在这样的匹配,所以应该说就找不到匹配,但是用Regex.IsMath(txtConten)这样以行代码的时候,程序总是失去响应,不知道为什么,我现在需要的不是正确的表达式,而是,如果文本中不存在这样的匹配的时候,应该怎么办,才不至于使程序失去响应?
问题点数:50、回复次数:10Top
1 楼Sunmast(速马@Redmond, WA)回复于 2005-06-02 16:07:11 得分 30
我用测试器测了一下,确实把测试器也弄死了 :-)
诡异Top
2 楼reddeephehe(一声声追问)回复于 2005-06-02 17:20:16 得分 20
还有这种事情,帮你顶Top
3 楼saucer(思归)回复于 2005-06-03 00:37:22 得分 0
really? I don't have any problems with the following code:
string[] slist ={
"<div id='Content'><div>abd</div>sdfdf</div>fsdfdsf",
"xxxxxx xxxxx xxxx xxxxx"
};
Regex re = new Regex(@"[\s\S]*?(?<content>\<div id='Content'\>\<div[\s\S]*?\<\/div\>[\s\S]*?\<\/div\>)[\s\S]*", RegexOptions.IgnoreCase);
foreach (string s in slist)
{
Console.WriteLine("{0} matches? {1}", s, re.IsMatch(s));
}
Top
4 楼Sunmast(速马@Redmond, WA)回复于 2005-06-03 14:03:19 得分 0
思归,我用来测试的是CSDN短消息页面的HTML源码嗯,测试器确实死掉了,CPU占用率一直100%
我觉得这很可能是FCL的一个缺陷Top
5 楼Sunmast(速马@Redmond, WA)回复于 2005-06-03 14:41:32 得分 0
嗯,思归发现去掉前面的[\s\S]*?就可以了,我发现只要等很长时间,还是会出结果的(所以不是死循环之类)
想了一下,最开头使用[\s\S]*或者[\s\S]*?,可以匹配所有文本,在这个地方分析器为了尽量匹配所有表达式,会在几乎每个点进行回逆查找,而如果要匹配的文本很大,那么就会很耗时
实际上去掉开头的[\s\S]*?的表达式也能满足你的要求Top
6 楼maconelxp(皮皮)回复于 2005-06-03 17:40:34 得分 0
看到两位大师回答我的问题,真是无比兴奋
我加上前边的[\s\S]*?主要是为了,进行文本的替换
对于较小的字符串来说不会出现问题,但是就像Sunmast(速马.上海)说的测试较长的HTML源码确实会导致程序失去响应
Top
7 楼minghui000(沉迷网络游戏)回复于 2005-06-05 01:36:10 得分 0
帮您顶一下Top
8 楼herodraw(herodraw)回复于 2005-06-05 02:50:45 得分 0
to楼主
进行文本的替换?
什么样的替换成什么样的!Top
9 楼maconelxp(皮皮)回复于 2005-06-06 11:37:02 得分 0
upTop
10 楼maconelxp(皮皮)回复于 2005-06-06 15:16:06 得分 0
upTop




