in reply to unable to fomulate right regular expression to fetch the intermediate and last word from a line (windows path) using delimiter "\"

Enough people have already focused on your wrong assumption of what you put in your path string ("$key), and thus why it cannot possibly work as you intended.

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:

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; }
Result:
in: C:\abc\dfg\axy out: axy in: C:\abc\dfg\#@$#@$@\hwllo out: #@$#@$@\hwllo
I believe that's something you can start out with.

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:

# 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 +; }
New output:
in: C:\abc\dfg\axy out: axy top directory: axy in: C:\abc\dfg\#@$#@$@\hwllo out: #@$#@$@\hwllo top directory: #@$#@$@
  • Comment on Re: unable to fomulate right regular expression to fetch the intermediate and last word from a line (windows path) using delimiter "\"
  • Select or Download Code