リンク抽出のための正規表現を考えてみた。あらためて、正規表現の使い方を確認。
こちらのサイトが詳しかったです。これを参考にリンクのURLとその他の属性取得を考えてみました。いろいろ試行錯誤が必要でした。最短マッチについても、今回初めて知りました。
public ISet<string> GetNewLinks2(string content)
{
var regexAtag2 = @"<a\s+[^>]*href\s*=\s*[""'](?<href>[^""']*?)(?<rel>[""'].*?</a>)";
ISet<string> newLinks = new HashSet<string>();
var r = new Regex(regexAtag2, RegexOptions.IgnoreCase);
var collection = r.Matches(content);
string matchrel;
foreach (Match m in collection)
{
string matchx = m.Groups["href"].Value.Trim();
matchrel = m.Groups["rel"].Value;
//filter//////////////属性に指定文字あるとパスするフィルタ
if (atagExcludeL.Select(stt => matchrel.Contains(stt)).Any(bl => bl == true))
{
continue;
}
if (!newLinks.Contains(matchx))
{
newLinks.Add(matchx);
}
}
return newLinks;
}
{
var regexAtag2 = @"<a\s+[^>]*href\s*=\s*[""'](?<href>[^""']*?)(?<rel>[""'].*?</a>)";
ISet<string> newLinks = new HashSet<string>();
var r = new Regex(regexAtag2, RegexOptions.IgnoreCase);
var collection = r.Matches(content);
string matchrel;
foreach (Match m in collection)
{
string matchx = m.Groups["href"].Value.Trim();
matchrel = m.Groups["rel"].Value;
//filter//////////////属性に指定文字あるとパスするフィルタ
if (atagExcludeL.Select(stt => matchrel.Contains(stt)).Any(bl => bl == true))
{
continue;
}
if (!newLinks.Contains(matchx))
{
newLinks.Add(matchx);
}
}
return newLinks;
}
リンクチェックには以下のサイトが参考になりました。
0 件のコメント:
コメントを投稿