gpt4 book ai didi

c# - 为什么这个 C# 正则表达式会使我的程序崩溃?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:21 25 4
gpt4 key购买 nike

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace Working
{
class Program4
{
static string errorurl =
"http://www.realtor.ca/propertyDetails.aspx?propertyId=8692663";

static void Main(string[] args)
{
string s;

s = getWebpageContent(errorurl);

s = removeNewLineCharacters(s);

getFields(s);

Console.WriteLine("End");
}


public static void getFields(string html)
{
Match m;
string fsRE = @"ismeasurement.*?>.*?(\d+).*?sqft";
m = Regex.Match(html, fsRE, RegexOptions.IgnoreCase);
}

private static string removeNewLineCharacters(string str)
{
string[] charsToRemove = new string[] { "\n", "\r" };

foreach (string c in charsToRemove)
{
str = str.Replace(c, "");
}

return str;
}


static string getWebpageContent(string url)
{
WebClient client = new WebClient();

client.Headers.Add("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;
.NET CLR 1.0.3705;)");

Stream data = client.OpenRead(url);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
data.Close();
reader.Close();

return s;
}
}
}

此程序挂起。当我删除 RegexOptions.IgnoreCase 选项或当我删除对 removeNewLineCharacters() 函数的调用时。
有人可以告诉我发生了什么事吗?

最佳答案

@"ismeasurement.*?>.*?(\d+).*?sqft"

看到那么多懒人搭配,估计花的时间太多了backtracking .

尝试将其重构为不使用惰性匹配,例如

@"ismeasurement[^>]*>\D*(\d+)\s*sqft"

删除 RegexOptions.IgnoreCase 的原因是因为该页面中只有字符串“isMeasurement”。删除 removeNewLineCharacters 的原因是因为 . 不匹配新行,所以它可以提前停止。

(顺便说一句,why are you matching HTML with Regex?)

关于c# - 为什么这个 C# 正则表达式会使我的程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com