1.Html中Tag提取
@H_404_4@<("[^"]*"|'[^']*'|[^'">])*> @H_404_4@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"; } } @H_404_4@3.校验HTTP URL
把它分解为主机名(hostname)和路径(path)两部分。
主机名是「^http://」之后到第一个/(如果有)之间的内容,路径就是除此之外的内容
「^http://([^/]+)(/.*)?$」
@H_404_4@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的框架,可以在其中添加匹配主机名的子表达式
@H_404_4@\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]+ )+ )?来自《精通正则表达式》