#!/usr/bin/perl $url = 'http://test.com/blah/doot/stuff.html'; ###### # first method of finding url after last / (the filename) # # ^ = beginning of string # $ = end of string # . = any character # * = zero or more matches of the previous character # # so .* will match 0 or more of any character (.) # # \/ is an escaped or literal / # # () anything inside parenthesis, if matched, is returned in the positional # arguments # $1 for the first set of parentheses # $2 for the second set of parentheses # etc # # ? means non-greedy ... which is a little weird # regexs are, by default greedy, meaning they will match as much as they # can. non-greedy will match as little as they can. we can get into that # more later # so to summarize what this regex is doing, its going to make sure that it # matches the whole string by framing it with /^$/; # its going to do a greedy match (.*) of anything before a literal / # which , since its greedy will match multiple literal slashes up until # the last one. note: if it was non-greedy (.*?), it would only match # up until one literal / # so after that literal slash, it starts saving the match with parentheses # inside the parentheses, it'll do a non-greedy match of anything (.*?) # so that'll get the rest of the line up until the end ($) if($url =~ /^.*\/(.*?)$/) { $filename = $1; print "match found filename = \"$filename\"\n"; } else { print "no match for filename\n"; } ###### # alternative method of finding url after last / @tmp = split '/',$url; $num = $#tmp; $filename2 = $tmp[$num]; print "filename2 = \"$filename2\"\n"; ###### # method of finding base url before and including last / (without the filename) if($url =~ /^(.*\/).*?$/) { $base = $1; print "match found base = \"$base\"\n"; } else { print "no match for base\n"; }