2016-08-03 3 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 

      { 


      } 

の第2のグループをチェックしていますそして、それが正常に動作していない:。

私は、このことにより、ソースコードを入手します例えば、私のソースコードが含まれています

exampleexampleexampleXYZ 
exampleXYZ 
example 
exampleXYZ 

そして、私の機能はXYZの唯一の2グループではなく、3

別の例があることは、言うことがあります:

exampleXYZ 
example 
example 
example 

m.Groups[0].Valueしかない場合は、m.Groups[1].Valueが見つかります。どうして?

+3

正規表現が一部の部分文字列にマッチする理由を尋ねていますが、実際の正規表現を見ずにその質問に答えることができたと思いました。あなたの身長と体重を推測してもらいたいですか?ところで、 'Groups [0]'はグループ化にかかわらず、全体の一致です。 'Groups [1]'は、もしあれば最初のグループです。 [何らかの理由で実際にこの資料を文書化している](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v = vs.110).aspx)。 –

+0

私はそれが 'regex r = new Regex("( "+ textBox1.Text +") ");' textBox1.Text = "XYZ"; ' – audiophonic

+0

あなたの前提に1000を打っていない今日。 –

答えて

2

私はあなたの質問を誤解しているかもしれませんが、あなたの問題はあなたが何を意味するのかを間違って推測したように見えます。Match.Groups

は、次のことを考えてみましょう:

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

m.Groupsには?あなたの理論は - まあいや、実際、理論は、あなたの理論は、それはこのことだということです。m.Groupsにことになっていない何

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

。これはm.Groupsに何である:Regex.Match最初に一致のみと一致するため

{ "a1", "1" } 

だこと。その単一の一致で見つかったものを記述するMatchオブジェクトを返します。 Match.Groupsの最初の項目は、キャプチャグループに関係なく、の一致番号です。残りの項目は、キャプチャグループが一致したものです。キャプチャグループは、エスケープされていないカッコで囲まれた正規表現の部分文字列によって定義されます。

私の正規表現の内の1つのキャプチャグループは、上にありました。最初のマッチ全体が「A1」である

([0-9]+) 

。最初のキャプチャグループは、キャプチャされていないキャラクタセット[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); 
} 

正規表現全体に括弧を付ける必要はありません。あなたが得るのは、マッチ全体と同一の単一のキャプチャグループです。害はありませんが、何も追加しません。

関連する問題