16717


下記でやっているんですが、これを改良して3行くらいで、HTMLソースを画像URLごとに配列で文字列に入れたいです。

[code]

    Regex hrefReg = new Regex(@"<a[^>]href[^>]*\.(jpg|jpeg|gif|png)[^>]*>.*?</a>");
    for (Match href = hrefReg.Match(pm.postHtml); href.Success; href = href.NextMatch())
    {
    
    Regex imgReg = new Regex(@"(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\.(jpg|jpeg|gif|png)");
    for (Match img = imgReg.Match(href.Value); img.Success; img = img.NextMatch())
    {
        if (result != null)
        {
            string placeHolder = "<img src=\"{0}\" alt=\"no title\" border=\"0\">";
    
            string imgUrl = String.Format(placeHolder, "画像URL");
    
            string tmpHtml = pm.postHtml.Replace(href.Value, imgUrl);
            pm.postHtml = tmpHtml;
        }
    }
    
    }
    
[/code]


CC BY-SA 3.0
2015-09-17T12:05:25.403
16711
2015-09-17T13:29:10.080
2015-09-17T13:23:24.647
3639
7973
question
c# 正規表現
画像URL正規表現


こういうことでしょうか。なお正規表現部分は流用なので改善の余地があると思います。

[code]

    string placeHolder = "<img src=\"{0}\" alt=\"no title\" border=\"0\">";
    Regex imgReg = new Regex(@"(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\.(jpg|jpeg|gif|png)");
    
    var results = imgReg.Matches(pm.postHtml)     // すべてのマッチを取得
                            .Cast<Match>()        // 非ジェネリックコレクションをキャスト
                            .Select(_ => _.Value) // キャプチャしたURLを取得
                            .Distinct()           // URLの重複をなくす
                            .Select(_ => string.Format(placeHolder, _)) // 出力文字列の作成
                            .ToArray();           // 配列の作成
    
[/code]


CC BY-SA 3.0
2015-09-17T13:29:10.080
16717
2015-09-17T13:29:10.080
5750
16711
answer