Hello Chas, I know I am missing something basic, but tell me in your second example why isn't the /1_0001.doc being printed as well? Regards, Jaimee
-----Original Message----- From: Chas Owens [mailto:[EMAIL PROTECTED]] Sent: Wednesday, May 01, 2002 4:37 PM To: garrett esperum Cc: [EMAIL PROTECTED] Subject: Re: string manipulation On Wed, 2002-05-01 at 18:52, garrett esperum wrote: > Hi all, > > I am using Solaris, Perl 5. > > I am having some problems manipulating strings. > > The string I am manipulating is: > > /export/home/user/www/doc-root/dir/projects/19463/1_0001.doc > > I am trying to take out the "19463" part from the string and insert it into > a variable. > > Example of my code to do this: > > $projectId = substr($projectDocDir, length($dir), index($projectDocDir, "/", > length($dir))); > > The $dir variable contains the path > "/export/home/user/www/doc-root/dir/projects". > > When I run my script, the string "1946" is returned, the last "3" is not. > What am I doing wrong?? > > Thanks you for your help!! > > -garrett Hows about using a xeger (backwards regex)? <example> #!/usr/bin/perl -w use strict; my $filename = "/export/home/user/www/doc-root/dir/projects/19463/1_0001.doc"; my $projectid; $projectid = reverse $1 if (reverse $filename) =~ m#^.*?/(.*?)/#; print "$projectid\n"; </example> Or maybe a normal regex using the 'projects' bit of the string <example> #!/usr/bin/perl -w use strict; my $filename = "/export/home/user/www/doc-root/dir/projects/19463/1_0001.doc"; my $projectid; $projectid = $1 if $filename =~ m#/projects/(.*?)/#; print "$projectid\n"; </example> or maybe use split like this: <example> #!/usr/bin/perl -w use strict; my $filename = "/export/home/user/www/doc-root/dir/projects/19463/1_0001.doc"; my $projectid = (split '/', $filename)[-2]; print "$projectid\n"; </example> -- Today is Sweetmorn the 48th day of Discord in the YOLD 3168 P'tang! Missile Address: 33:48:3.521N 84:23:34.786W -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]