微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式处理html实例Perl实现

1.Html中Tag提取

<("[^"]*"|'[^']*'|[^'">])*>

2.提取<a></a>标签中的url和链接文本

while ($Html =~ m{a\b([^>]+)>(.*?)</a>}ig)
{
	my $Guts = $1;
	my $Link = $2;
	if ($Guts =~ m{
				\b HREF	#href属性
				\s* = \s*	#两头可能出现空白符
				(?:			#其值为
				"([^"]*)"	#双引号字符串
				|
				'([^']*)'	#单引号字符串
				|
				([^'">\s]+)	#或者是其他文本
				)
				}xi)
		{
			my $Url = $+;
			print "$Url with link text: $Link\n";
		}
}
 

3.校验HTTP URL

把它分解为主机名(hostname)和路径(path)两部分。

主机名是「^http://」之后到第一个/(如果有)之间的内容,路径就是除此之外的内容

「^http://([^/]+)(/.*)?$」

if ($url =~ m{^http://([^/:]+)(:(\d+))?(/.*)?$}i)
{
	my $host = $1;
	my $port = $3 || 80;   #如果存在就使用$3,否则认为80
	my $path = $4 || "/";  #如果存在就使用$4,否则认为”/“
	print "Host: $host\n";
	print "Port: $port\n";
	print "Path: $path\n";
}	else	{
	print "Not an HTTP URL\n";
}

4.从纯文本中查找URL的框架,可以在其中添加匹配主机名的子表达式

\b
(
	(ftp|https?)://[-\w]+(\.\w[-\w]*)+
	|
	(?i: [a-z0-9] (?:[-a-z0-9]*[a-z0-9])? \. )+

	(?-i: com\b
		| edu\b
		| biz\b
		| gov\b
		| in(?:t|fo)\b
		| mil\b
		| net\b
		| org\b
		| [a-z][a-z]\b
	)
)
( : \d+ )?
(
	/
	[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]*
	(?:
		[.!,?]+ [^.!,?;"'<>()\[\]()\s\x7F-\xFF]+
	)+
)?


来自《精通正则表达式》

原文地址:https://www.jb51.cc/regex/362697.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐