日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

[正则表达式] 可以解析HTML/XHTML页面的所有元素和结构的Regular Expression![ZT]

發(fā)布時間:2023/12/9 HTML 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [正则表达式] 可以解析HTML/XHTML页面的所有元素和结构的Regular Expression![ZT] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ZT: http://www.cnblogs.com/Laser_Lu/archive/2005/04/21/142605.html

哈哈,繼 昨天的那個正則表達式?之后又寫了一個更長的Regular Expression,全長527,是用于查找出所有的XHTML/HTML的標記外面的所有空格,并將之轉換為 的。 希望這個能夠解決dudu提的一個cnblogs的bug:)即使不能解決問題也算是對System.Text.RegularExpression.Regex的一個練筆了:)

(?:(?:\<(?:Style)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:Style)\>))|(?:(?:\<(?:script)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:script)\>))|(?:\<!(?:[\w-]+)(?:\s+(?:[\w-]+|\"[\s\S]*?\"|\'[\s\S]*?\'))*\s*\>)|(?:\<!--[\s\S]*?--\>)|(?:\<(?:[\w-]+)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)|(?:\</(?:[\w-]+)\>)|(?:\<!\[CDATA\[(?:[\s\S]*?)\]\]\>)|(?:(?:(?<blank>[ ]+)|[^ \<\>])+)

這個正則表達式雖然很長,但可不是我用手code出來的哦,是我寫的程序產生的,代碼如下:)

public static string ReplaceSpace(string content)
{
string tag = @"(?:[\w-:]+)";
string attribute = @"(?:[\w-:]+)(?:=(?:[^\s\>\<]*|\""[\s\S]*?\""|\'[\s\S]*?\'))?";
string name = @"(?:[\w-:]+)";
string argument = @"(?:[\w-:]+|\""[\s\S]*?\""|\'[\s\S]*?\')";

string beginningTag = @"(?:\<" + tag + @"(?:\s+" +attribute + @")*\s*(?:/)?\>)";
string endingTag = @"(?:\</" + tag + @"\>)";
string xmlComment = @"(?:\<!--[\s\S]*?--\>)";
string xmlDirective = @"(?:\<!" +name + @"(?:\s+" +argument + @")*\s*\>)";
string xmlCData = @"(?:\<!\[CDATA\[(?:[\s\S]*?)\]\]\>)";
string styleBlock = @"(?:(?:\<(?:Style)(?:\s+" +attribute + @")*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:Style)\>))";
string scriptBlock = @"(?:(?:\<(?:script)(?:\s+" +attribute + @")*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:script)\>))";
string xmlLiteral = @"(?:(?:(?<blank>[ ]+)|[^ \<\>])+)";

string pattern = styleBlock + "|" + scriptBlock + "|" + xmlDirective + "|" + xmlComment + "|" + beginningTag + "|" + endingTag + "|" + xmlCData + "|" + xmlLiteral;

Regex r
= new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);

MatchCollection mc
= r.Matches(content);

StringBuilder sb
= new StringBuilder(content.Length + 1024);
foreach (Match m in mc)
{
if (m.Groups["blank"].Captures.Count > 0)
{
sb.Append(m.Value.Replace(
" ", "&nbsp;"));
}

else
{
sb.Append(m.Value);
}

}

return sb.ToString();
}



最后,再給個更長的(全長765)正則表達式,這個算是我寫的最長的正則表達式了。其實上面給出的第一個Regex是下面這個的一個專用于捕獲blank的簡化版本。
雖 然長,但很有用,可以解析出整個XHTML/HTML頁面的所有元素和結構來:)解析后的內容都分別保存在named groups中了,可以通過match.Groups["name"];來提取,比如match.Groups["tag"];match.Groups ["attribute"];match.Groups["Style_Block";match.Groups["XML_Comment"];等,感 興趣的不妨試一試就知道了:)

(?#Copyright 2005, by Laser Lu.)(?<Style_Block>(?<begin>\<(?<tag>style)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<Script_Block>(?<begin>\<(?<tag>script)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<XML_Directive>\<!(?<name>[\w-:]+)(?:\s+(?<argument>[\w-:]+|\"[\s\S]*?\"|\'[\s\S]*?\'))*\s*\>)|(?<XML_Comment>\<!--[\s\S]*?--\>)|(?<Beginning_Tag>\<(?<tag>[\w-:]+)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)|(?<Ending_Tag>\</(?<tag>[\w-:]+)\>)|(?<XML_CDATA>\<!\[CDATA\[(?<data>[\s\S]*?)\]\]\>)|(?<XML_Literal>(?:(?<blank>[ ]+)|[^ \<\>])+)

關于以上的兩個Regex的相關說明,應該說功能還是比較強大的了:
1。這兩個正則表達式能夠解析最好是HTML/XHTML格式,如果是其他格式的字符串,有可能會運行不正常;
2。支持識別的標記有:普通的HTML標記,<!--HTML注釋-->,<!XML指令>,<![CDATA[ ... ]]>,標記或指令的標識符支持[a-zA-Z0-9_-:];
3。支持name=value和單獨一個name的attribute,能夠識別出""或''包括的屬性值;
4。針對<style></style>和<script></script>標記包含的內容進行特殊處理,也就是所有的CSS和Script代碼將原封不動的作為整體捕獲。

轉載于:https://www.cnblogs.com/junmorn/archive/2006/02/23/336552.html

總結

以上是生活随笔為你收集整理的[正则表达式] 可以解析HTML/XHTML页面的所有元素和结构的Regular Expression![ZT]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。