But, Perl being the TIMTOWTDI language that it is, I'd like to point out to a different approach, and that is using the modules File::Spec (or its procedural variant File::Spec::Functions), and possibly File::Basename for extracting the full directory and path and the base filename, from a path.
Specifically, you could use abs2rel, like this:
Result:my $key = "C:\\abc\\dfg"; my @example = ("C:\\abc\\dfg\\axy", "C:\\abc\\dfg\\#\@\$#\@\$\@\\hwllo +"); use File::Spec::Functions qw(abs2rel); foreach (@example) { my $rel = abs2rel($_, $key); printf "in: %s\nout: %s\n\n", $_, $rel; }
I believe that's something you can start out with.in: C:\abc\dfg\axy out: axy in: C:\abc\dfg\#@$#@$@\hwllo out: #@$#@$@\hwllo
Furthermore, if you're interested in getting the top level directory (?) name from that result, you can use the function splitdir from File::Spec::Functions:
New output:# modified source use File::Spec::Functions qw(abs2rel splitdir); foreach (@example) { my $rel = abs2rel($_, $key); my($topdir) = splitdir($rel); printf "in: %s\nout: %s\ntop directory: %s\n\n", $_, $rel, $topdir +; }
in: C:\abc\dfg\axy out: axy top directory: axy in: C:\abc\dfg\#@$#@$@\hwllo out: #@$#@$@\hwllo top directory: #@$#@$@
In reply to Re: unable to fomulate right regular expression to fetch the intermediate and last word from a line (windows path) using delimiter "\"
by bart
in thread unable to fomulate right regular expression to fetch the intermediate and last word from a line (windows path) using delimiter "\"
by suniln
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |