画像URL正規表現

投稿者: Anonymous

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

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

}

解決

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

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();           // 配列の作成
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *