检查网站是否包含重复文字

时间:2016-08-03 15:27:56

标签: c# regex

我想知道网站是否包含重复的特定文字。

我通过这个获得源代码:

public static string getSourceCode(string url)
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(resp.GetResponseStream());
    string sourceCode = sr.ReadToEnd();
    sr.Close();
    resp.Close();
    return sourceCode;

}

然后我正在检查第二组正则表达式

            try
            {
                sourceCode = Worker.getSourceCode(url);

                Regex r = new Regex("(" + textBox1.Text + ")");

                var m = r.Match(sourceCode);

                dataGridView1.Rows.Add(m.Groups[1].Value);

            }

            catch

            {


            }

它无法正常工作。例如,我的源代码包含:

exampleexampleexampleXYZ
exampleXYZ
example
exampleXYZ

我的功能说,只有2组XYZ,而不是3。

另一个例子,它有:

exampleXYZ
example
example
example

现在只有m.Groups[1].Value才能找到m.Groups[0].Value。为什么呢?

1 个答案:

答案 0 :(得分:2)

我可能误解了你的问题,但在我看来,你的问题是你猜错了Match.Groups的含义。

请考虑以下事项:

var re = new Regex("[a-z]([0-9]+)");
var m = re.Match("a1b22c333");

m.Groups中的内容是什么?你的理论 - 不,实际上,我的理论是你的理论就是这样:

{ "1", "22", "333" }

这不是m.Groups中的内容。这就是m.Groups

中的内容
{ "a1", "1" }

这是因为Regex.Match仅匹配第一场比赛。它返回一个Match对象,描述它在一次匹配中找到的内容。 Match.Groups中的第一项是整个匹配,与捕获组无关。其余项目是捕获组匹配的内容。捕获组由未转义的括号中包含的正则表达式的子字符串定义。

上面的正则表达式中有一个捕获组:

([0-9]+)

第一场比赛是“a1”。第一个捕获组匹配未捕获字符集[a-z]后面的数字序列。

如果您想同时进行所有比赛,请致电Regex.Matches,然后返回MatchCollection

var re = new Regex("[a-z]([0-9]+)");

foreach (var m in re.Matches("a1b22c333")) {
    Console.WriteLine("Match:");
    Console.WriteLine("  full match: " + m.Groups[0].Value);
    Console.WriteLine("  first captured group: " + m.Groups[1].Value);
}

而且你不需要在整个正则表达式周围放置parens;所有你得到的只是一个与整个比赛相同的捕捉组。没有坏处,但它没有添加任何东西。