----- Original Message ----
From: I.B. <[EMAIL PROTECTED]>
To: begginers perl.org <beginners@perl.org>
Sent: Saturday, January 20, 2007 1:02:39 PM
Subject: Re: Selective splits... (treat this "pattern" as a delimiter only if 
it is followed by this "pattern")

> you can use lookaheads:

> my @matched = split /\s+(?=\w+=)/,$string;

I've already figured that out, but there's one problem  I encountered:
What I did was to modify the entire line first and substitute all necessary 
\s+. with '*' so that splitting will be easier.

Those \s+ were:

all spaces if the following word is not either date or time and also all spaces 
if the following word is \w+=

My regexp looks like this:

$_ =~ s/\s+(?!(date|time))/*/g ;

Now, having a problem where to put my parenthesis to add the "?=\w+=" 
condition..
Can you help me with this? I tried several times but I failed.

Thanks.





> cheers,
> ~i

On 1/19/07, Michael Alipio <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Suppose I have:
>
>
> my $string = 'Jan 19 11:37:21 firewall date=2007-01-19 time=11:42:15 
> devname=TESTfirewall device_id=FGT-602905503304 log_id=0104032006 ty
> pe=event subtype=admin pri=information vd=root user="admin" 
> ui=GUI(192.168.1.1) action=login status=success reason=none msg
> ="User admin login successfully from GUI(192.168.1.1)"
> ';
>
>
> That is, on a regular \s+ split, I will produce this list of strings:
> Jan
> 19
> 11:37:21
> firewall
> date=2007-01-19
> time=11:42:15
> devname=TESTfirewall
> device_id=FGT-602905503304
> log_id=0104032006
> type=event
> subtype=admin
> pri=information
> vd=root
> user="admin"
> ui=GUI(192.168.1.1)
> action=login
> status=success
> reason=none
> msg="User
> admin
> login
> successfully
> from
> GUI(192.168.1.1)"
>
> However, I only want to split it with \s+ as delimiter, only if that \s+ is 
> followed by "\w+=" so that the: 'msg="User admin login successfully from 
> GUI(192.168.1.1)" will not be splited.
>
> I tried putting parenthesis in my split pattern:
>
> split/(\s+)\w+=/, $_
>
> So that it will only split the line delimited by space if it is followed by 
> any "\w+=" just like when doing a regexp matching.
> But the program treats \w+= as part of the whole pattern so instead of 
> getting:
>
> date=2007-01-19
>
> time=11:42:15
>
> devname=TESTfirewall
>
> device_id=FGT-602905503304
>
>
> I got:
>
> 2007-01-19
>
> 11:42:15
>
> TESTfirewall
>
> FGT-602905503304
>
>
> Any idea how to accomplish my goal?
>
>
>
>
>
>
>
>
>
> ____________________________________________________________________________________
> It's here! Your new message!
> Get new email alerts with the free Yahoo! Toolbar.
> http://tools.search.yahoo.com/toolbar/features/mail/
>

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/









 
____________________________________________________________________________________
8:00? 8:25? 8:40? Find a flick in no time 
with the Yahoo! Search movie showtime shortcut.
http://tools.search.yahoo.com/shortcuts/#news

Reply via email to