我正在开发一个程序,需要从URL中提取TLD和网页扩展
例如:http://www.example.com/somedir/someotherdir/index.html
应该为我提供TLD .com
和扩展Html
虽然:http://www.example.com.au/somedir/someotherdir/index/
应该为我提供TLD .com.au
和扩展null
有什么方法可以用Perl中的Regex做到这一点?我在Perl中使用URI模块,但似乎无法执行此类型的提取。
答案 0 :(得分:3)
如果您使用的是URI模块,则可以轻松提取host
和path
。然后,这是一个简单的问题,在最后一个点之后取出所有内容,或相反地删除所有内容,包括最后一个点。您可能希望扩展更复杂,以正确处理没有扩展的情况。
($tld = $uri->host) =~ s/.*\.//;
($extension = $uri->path) =~ s/.*\///;
$extension = '' unless $extension =~ s/.*\.//;
答案 1 :(得分:0)
可以修改RFC-3986 Appendix B中提供的正则表达式来完成此任务:
if ($urltext =~ m!
^ # Anchor to start of string.
(?:[^:/?#\s]+:)? # Optional URI scheme.
//[^:/?#\s]+\. # Required (non-IP) host (up to TLD)
([^:/?#\s.\d]+) # $1: Top level domain(TLD)
(?::\d+)? # Optional port.
/ # Required path separator.
[^?#\s]*\. # Path up to file extension.
([^?#\s.]+) # $2: File extension.
(?:\?[^#\s]*)? # Optional query.
(?:\#\S*)? # Optional fragment.
$ # Anchor to end of string.
!x) {
$tld = $1;
$ext = $2;
} else {
# no match
}
(注意:SO语法高亮显示器无法处理Perl'x'模式正则表达式)