假设我有像
这样的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>
首先我将使用正则表达式,它将返回所有链接标记详细信息,第二个正则表达式将返回所有脚本标记详细信息。我搜索谷歌但是 没有任何合适的东西。如果有人知道这两个正则表达式,请告诉我。感谢
答案 0 :(得分:2)
This回答是您正在寻找的答案。不要试图用正则表达式解析HTML。
答案 1 :(得分:2)
正如其他人所评论的那样,尝试用正则表达式解析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包含在string类型的变量中:
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;
}
答案 2 :(得分:1)
用正则表达式解析HTML并不是一个好主意,它需要一个真正的解析器才能正确地完成它。
虽然可以让它与您给出的第一个示例文本一起使用,但您似乎会花费每个醒着的时刻进行更改,以涵盖您必须解析的下一个文本中的每个“特殊情况”。 / p>
答案 3 :(得分:1)
此解析器似乎很受欢迎:HTML Agility Pack