2016-08-03 63 views
0

我想知道,如果網站包含重複的具體文本。檢查站點包含重複文本

我通過此獲得源代碼:

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。爲什麼?

+3

所以你問爲什麼你的正則表達式匹配一些子串而不是其他的,但你認爲我們可以回答這個問題沒有看到你的實際正則表達式。你想我們猜測你的身高和體重嗎?順便說一句,「Groups [0]」是整個比賽,不管分組是什麼; '組[1]'是第一組,如果有的話。 [他們實際上記錄了這些東西,出於某種原因](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v = vs.110).aspx)。 –

+0

我認爲這很清楚,'regex r = new Regex(「(」+ textBox1.Text +「)」);'when'textBox1.Text =「XYZ」;' – audiophonic

+0

你沒有在你的假設下擊球1000今天。 –

回答

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); 
} 

而且你不需要打擾把你的整個正則表達式;你所得到的只是一個與整個比賽相同的捕獲組。沒有傷害,但它沒有增加任何東西。