正则表达式—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]*)*

你可能感兴趣的:(正则表达式)