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

本文关键字:帮助 正则表达式 | 更新日期: 2023-09-27 18:17:02

假设我有像

这样的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可能不是一个好的做法,但这正是您所要求的。我们开始:

' link '标签的正则表达式

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

script标签的正则表达式

@"(?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不是一个好主意,它需要一个真正的解析器来正确地完成。

虽然有可能使它与您给出的第一个示例文本一起工作,但您似乎会花费每一个清醒的时刻进行更改,以覆盖您必须解析的下一个文本中的每个"特殊情况"。

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