0

入力としてHTMLソースがあり、WebサイトがどのCMSで作成されているか知りたいです。多くのCMSは、次のようなメタタグに名前を残しています。

<meta name="Generator" content="MY CMS" />   

私はこのような結果を得ることができます:

        Match match = Regex.Match(html, ".*(?i)meta.*generator.*");
        match = Regex.Match(match.ToString(), "content.*\".*\"");
        match = Regex.Match(match.ToString(), "\".*\"");

「MYCMS」をくれます

しかし、それを1つのRegex.Matchに短縮する方法はありますか?

メタタグは次のようになる可能性があることに注意してください。

<meta content="MY CMS" name="Generator" />

よろしくお願いします

4

3 に答える 3

1
var regex = new Regex(@"<meta\s+name=""Generator""\s+content=""([^""]+)""", RegexOptions.IgnoreCase);
var match = regex.Match(html);
var generator = match.Groups[1].Value;
于 2012-11-24T17:36:45.657 に答える
1

次のことを試してください。

Regex regex = new Regex(@"<meta[^>]+content\s*=\s*['"]([^'"]+)['"][^>]*>");
Match match = regex.Match(input);

値はグループ1にあります。

それが役に立てば幸い。

于 2012-11-24T17:37:00.417 に答える
1

正規表現は、HTMLファイルの解析には適していません。

HTMLは厳密ではなく、その形式も規則的ではありません。

htmlagilitypackを使用する

正規表現は正規表現に使用されますが、不規則な表現ではありません

このコードを使用して、を使用して取得できますHtmlAgilityPack

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

var content= doc.DocumentNode
                .SelectSingleNode("//meta[@name='Generator']")
                .Attributes["content"].Value;
于 2012-11-24T17:54:44.670 に答える