簡體   English   中英

需要有關正則表達式的幫助

[英]Need help regarding Regular Expression

假設我有html之類的

<html>
<Head>
<link type="text/css" href="c1.css" rel="stylesheet" />
<link type="text/css" href="c2.css" rel="stylesheet" />
<link type="text/css" href="c3.css" rel="stylesheet" />
<link type="text/css" href="c4.css" rel="stylesheet" />
<link type="text/css" href="c5.css" rel="stylesheet" />

<script type="text/javascript" src="j1.js"></script>
<script type="text/javascript" src="j2.js"></script>
</Head>

<body>

<script type="text/javascript" src="j3.js"></script>
<script type="text/javascript" src="j4.js"></script>

</body>
</html>

首先,我將使用正則表達式將返回所有鏈接標簽詳細信息,第二個正則表達式將返回所有腳本標簽詳細信息。 我搜索谷歌,但沒有任何合適的方法。 如果有人知道兩種正則表達式模式,請告訴我。 謝謝

這個答案就是您要尋找的答案。 不要嘗試使用正則表達式解析HTML。

正如其他人所評論的那樣,嘗試使用正則表達式解析HTML可能不是一個好習慣,但這就是您所要的。 所以我們開始:

鏈接標簽的正則表達式

@"(?ix)" +
@"<link\s*type=\x22(?'type'.*?)\x22\s*" +
@"href=\x22(?'href'.*?)\x22\s*" +
@"rel=\x22(?'rel'.*?)\x22\s*" +
@"\/>";

腳本標簽的正則表達式

@"(?ix)" + 
@"<script\s*type=\x22(?'type'.*?)\x22\s*" +
@"src=\x22(?'src'.*?)\x22\s*" +
@"><\/script>";

假設您將HTML放在字符串類型的變量中:

public const string LINK_PATTERN = 
                        @"(?ix)" +
                        @"<link\s*type=\x22(?<type>.*?)\x22\s*" +
                        @"href=\x22(?<href>.*?)\x22\s*" +
                        @"rel=\x22(?<rel>.*?)\x22\s*" +
                        @"\/>";

public const string SCRIPT_PATTERN =
                        @"(?ix)" +
                        @"<script\s*type=\x22(?<type>.*?)\x22\s*" +
                        @"src=\x22(?<src>.*?)\x22\s*" +
                        @"><\/script>";

static void Main(string[] args)
{
    string html = getBody();

    Regex links = new Regex(LINK_PATTERN);
    Regex scripts = new Regex(SCRIPT_PATTERN);

    foreach (Match link in links.Matches(html)) 
    {
        Console.WriteLine("<link>: " + link);

        Console.WriteLine("\ttype: " + link.Groups["type"]);
        Console.WriteLine("\thref: " + link.Groups["href"]);
        Console.WriteLine("\trel: " + link.Groups["rel"]);

        Console.WriteLine("");
    }

    foreach (Match script in scripts.Matches(html)) 
    {
        Console.WriteLine("<script>: " + script);

        Console.WriteLine("\ttype: " + script.Groups["type"]);
        Console.WriteLine("\tsrc: " + script.Groups["src"]);

        Console.WriteLine("");
    }

    Console.ReadKey();
}

public static string getBody()
{
    string html = "";

    html += "<html>";
    html += "<head>";
    html += "<link type=\"text/css\" href=\"c1.css\" rel=\"stylesheet\" />";
    html += "<link type=\"text/css\" href=\"c2.css\" rel=\"stylesheet\" />";
    html += "<link type=\"text/css\" href=\"c3.css\" rel=\"stylesheet\" />";
    html += "<link type=\"text/css\" href=\"c4.css\" rel=\"stylesheet\" />";
    html += "<link type=\"text/css\" href=\"c5.css\" rel=\"stylesheet\" />";
    html += "<script type=\"text/javascript\" src=\"j1.js\"></script>";
    html += "<script type=\"text/javascript\" src=\"j2.js\"></script>";
    html += "<body>";
    html += "<script type=\"text/javascript\" src=\"j3.js\"></script>";
    html += "<script type=\"text/javascript\" src=\"j4.js\"></script>";
    html += "</body>";
    html += "</html>";

    return html;
}

用正則表達式解析HTML不是一個好主意,它需要一個真正的解析器才能正確執行。

盡管有可能使它與您收到的第一個示例文本一起使用,但是隨后您似乎會花費所有清醒的時間進行更改以覆蓋您必須解析的下一個文本中的每個“特殊情況”。

該解析器似乎很流行: HTML Agility Pack

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM