C# 需要关于正则表达式的帮助吗

C# 需要关于正则表达式的帮助吗,c#,asp.net,regex,C#,Asp.net,Regex,假设我有类似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" h

假设我有类似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。

因为其他人对它进行了评论,尝试用正则表达式解析HTML可能不是一个好的做法,但这正是您所要求的。现在我们开始:

'link'标记的正则表达式 “(?ix)”+ @""; 'script'标记的正则表达式
@”(?ix)+
@"";
例子 假设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;
}
public const字符串链接\u模式=
@“(?ix)”+
@"";
公共常量字符串脚本\u模式=
@“(?ix)”+
@"";
静态void Main(字符串[]参数)
{
字符串html=getBody();
正则表达式链接=新正则表达式(链接模式);
正则表达式脚本=新正则表达式(脚本模式);
foreach(links.Matches(html))中的匹配链接
{
Console.WriteLine(“:”+链接);
Console.WriteLine(“\t类型:”+link.Groups[“类型”]);
Console.WriteLine(“\thref:+link.Groups[”href“]);
Console.WriteLine(“\trel:+link.Groups[“rel”]);
控制台。写线(“”);
}
foreach(脚本中的匹配脚本。匹配(html))
{
Console.WriteLine(“:”+脚本);
Console.WriteLine(“\t类型:”+script.Groups[“类型”]);
Console.WriteLine(“\tsrc:+script.Groups[“src”]);
控制台。写线(“”);
}
Console.ReadKey();
}
公共静态字符串getBody()
{
字符串html=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
html+=“”;
返回html;
}

您想要什么“详细信息”?其中一个属性?整个标签?是什么让你认为使用正则表达式是个好主意?为什么你需要使用正则表达式?为什么不能使用HTML解析器?
@"(?ix)" + 
@"<script\s*type=\x22(?'type'.*?)\x22\s*" +
@"src=\x22(?'src'.*?)\x22\s*" +
@"><\/script>";
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;
}