1. 程式人生 > >正則表示式—HTML中的匹配

正則表示式—HTML中的匹配

從HTML中文字中提取Email地址和http URL,是在做爬蟲時候的經常用到的技術,雖然變成語言本身可以幫助我們找到他們,但是用正則表示式來匹配也是很有用和具有實際意義的方法。

一、匹配HTML Tag

HTML不是有特別嚴格程式設計要求的,因此在匹配時會遇到很多特殊情況需要特殊處理,這裡僅僅給出一般化的解決方法:
【文字】ddd< input name=dir value=”>”>ddd
【解析】顯然,文字中非轉義字元>與閉尖括號的提取是難點,不能嚮往常一樣[^>]來提取。
【表示式】 <(“[^”]*”|’[^’]*’|[^’”>])*>
“[^”]*”表示提取雙括號的內容
‘[^’]*’表示提取單括號的內容
[^’”>]表示提取其他內容
【注意】也許你用<.*>也能匹配上述文字,但是實際情況時當你遇到的是ddd< input name=dir value=”>”>ddd< / input>時候,它將匹配全部。

【文字】< a href=”http://www.csdn.net”>my blog < / a >
【解析】要獲取雙引號或單引號中間的地址,但不是所有雙引號的內容都是Link,“href=”很重要
【表示式】href\s*=\s*(“[^”]*”|”[^’]*”|[^”’>]+)

三、真實世界中提取URL

【文字】read the comments at http://www.baidu.com/ask_tik/index.html you can find …
【解析】URL型別包括:māilto, http, https, ftp
但是有時候文字中並不包含上訴開頭,而是直接以www.baidu.com出現。
【表示式1】
(ftp|https?)://[-\w]+(.\w[-\w]*)+|
(?:[a-z0-9]( ? :[-a-z0-9][a-z0-9])?\.)+
(?:com\b
|edu\b
|gov\b
|org\b
|net\b
|[a-z][a-z]\b)
(
/
[^.!,?:”’<>()[]{}\s\x7F-\xFF]*
(?:[.!,?]+[^.!.?;”’<>()[]{}\s\x7F-\xFF])*
)?
【不包含特殊符號(?!=)的URL的表示式】https?://\w+(.\w+)+(\/\w+)*(.\w+)*
【包含特殊符號(?!=)的URL簡化表示式】
https?://\w+(.\w*)+(?:\.com)*
(\/[^”’<>()[]{}\s\x7F-\xFF]*)*