Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Simple Regular Expression.

Reply
Thread Tools

Simple Regular Expression.

 
 
EFP
Guest
Posts: n/a
 
      11-26-2003
Can anyone help me with a simple regular expression problem.

All that I want to do is take a list of known data and extract a
particular section of the string to form a new list.

Here is my code snipet:

my $fh = new FileHandle('c:\Units.txt') ; ## sucks up my work file
my @lines1 = <$fh>; ## assigns the filehandler contents to @lines1
foreach $string (@lines1) ## extract each line from @lines and put it
in $string
{

$string =~ m/\*@@\$/;

print "NewString :: $string\n";
}

Sample Units.txt data:
..\Source\CPP\ConnPool\src\oraUtils.pc@@
..\Source\CPP\ConnPool\src\sample.pc@@
..\Source\CPP\Services\src\OExceptServer.pc@@
..\Source\CPP\Services\src\Rees1440Server.pc@@
..\Source\CPP\Services\src\SWDTestServer.pc@@
..\Source\CPP\TestCases\TestRees1800\testRees1800C ursor.pc@@
..\Source\CPP\TSRI\Remis1\cxxsrc\Buffer_Area.pc@@

I just want the:
oraUtils.pc

I'd even settle for:
oraUtils.pc@@

So basically I want the contents between "\" and the "@@"

I thought that:
$string =~ m/\*@@\$/;

Would go to the end of the search line and find "@@" and get anything
"*" between the "@@" and the "\" and set $string to this new value.

What it returns is:
element:: .\Source\CPP\ConnPool\src\oraUtils.pc@@

Can anyone correct my understanding of regular expression and
assignment to a varibale.

Thanks.
EFP
 
Reply With Quote
 
 
 
 
Gunnar Hjalmarsson
Guest
Posts: n/a
 
      11-26-2003
EFP wrote:
> Sample Units.txt data:
> .\Source\CPP\ConnPool\src\oraUtils.pc@@


<snip>

> I just want the:
> oraUtils.pc


<snip>

> So basically I want the contents between "\" and the "@@"
>
> I thought that:
> $string =~ m/\*@@\$/;
>
> Would go to the end of the search line and find "@@" and get
> anything "*" between the "@@" and the "\" and set $string to this
> new value.


What on earth made you think that??

> Can anyone correct my understanding of regular expression and
> assignment to a varibale.


Yes, you can do that. By studying the Perl documentation for regular
expressions:

http://www.perldoc.com/perl5.8.0/pod/perlre.html

This would do what you want:

($string) = $string =~ /.*\\(.+)\@\@/;

But please use the docs to get an understanding of how it works.

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

 
Reply With Quote
 
 
 
 
EFP
Guest
Posts: n/a
 
      12-01-2003
Based upon your expression I'm still not sure how it works. You have
the first ".*" which says 0 or more periods. Then you escape the slash
to look for a "\" then the "(.+)" match 1 or more periods and then you
escape both @@'s individually. So I still don't understand how the
".*" and the "(.+)" are used. Also, how does this say give me the
contents between the \ and the @@. I have read the reference pages
before and after this post. Could you shed some light on the
reasoning? I'm sure once you explain it regular expression will be
easier to comprehend.

..\Source\CPP\ConnPool\src\oraUtils.pc@@ (source)

Thanks




Gunnar Hjalmarsson <(E-Mail Removed)> wrote in message news:<3S4xb.39420$(E-Mail Removed)>...
> EFP wrote:
> > Sample Units.txt data:
> > .\Source\CPP\ConnPool\src\oraUtils.pc@@

>
> <snip>
>
> > I just want the:
> > oraUtils.pc

>
> <snip>
>
> > So basically I want the contents between "\" and the "@@"
> >
> > I thought that:
> > $string =~ m/\*@@\$/;
> >
> > Would go to the end of the search line and find "@@" and get
> > anything "*" between the "@@" and the "\" and set $string to this
> > new value.

>
> What on earth made you think that??
>
> > Can anyone correct my understanding of regular expression and
> > assignment to a varibale.

>
> Yes, you can do that. By studying the Perl documentation for regular
> expressions:
>
> http://www.perldoc.com/perl5.8.0/pod/perlre.html
>
> This would do what you want:
>
> ($string) = $string =~ /.*\\(.+)\@\@/;
>
> But please use the docs to get an understanding of how it works.

 
Reply With Quote
 
Gunnar Hjalmarsson
Guest
Posts: n/a
 
      12-01-2003
EFP wrote:
> Gunnar Hjalmarsson wrote:
>> EFP wrote:
>>>
>>> Sample Units.txt data:
>>> .\Source\CPP\ConnPool\src\oraUtils.pc@@
>>>
>>> I just want the:
>>> oraUtils.pc

>>
>> ($string) = $string =~ /.*\\(.+)\@\@/;

>
> Based upon your expression I'm still not sure how it works. You
> have the first ".*" which says 0 or more periods.


No it doesn't. '.' is a regex metacharacter that matches any character
(except newline) if it's not escaped, so it says 0 or more of _any_
characters.

> Then you escape the slash to look for a "\"


Correct. Since the '.*' is "greedy", the '\\' matches the _last_
backslash. (Read about "greediness" in perldoc perlre.)

> then the "(.+)" match 1 or more periods


Again, it matches 1 or more of _any_ characters. The parentheses
capture the content, and the regex returns it when it's evaluated in
list context. The parentheses surrounding $string enforces list
context. (Read about "context" in perldoc perldata.)

> and then you escape both @@'s individually.


Yep.

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
See If You Can Modify This Simple Regular Expression Joey ASP .Net 3 05-26-2006 08:48 PM
Need Help With Simple Regular Expression Joey ASP .Net 7 05-24-2006 02:41 PM
Simple Regular Expression need Q. John Chen ASP .Net 18 08-31-2005 10:08 PM
using regular phone as voip device with regular modem? hygum VOIP 5 03-23-2005 03:51 PM
Dynamically changing the regular expression of Regular Expression validator VSK ASP .Net 2 08-24-2003 02:47 PM



Advertisments