Re: Regex advice

[email protected] (Steve Bertrand)
Newsgroups perl.beginners
Message-ID <[email protected]>
>> if (/.*simscan~\[\d+\]~([\w|\s]+).*?~(\d+\.\d+)s~.*?~(.*?)~(.*?)~(.*)/) {
> -------------------------^^^^^^^^^^
> This captures the "result", but with a trailing space. You may want to 
> let the capturing parentheses be followed by \s to prevent that.
> 
>>                 $result   = $1 if $1;
>>                 $scantime = $2 if $2;
>>                 $ip       = $3 if $3;
>>                 $from     = $4 if $4;
>>                 $to       = $5 if $5;
> 
> The statement modifiers seem redundant to me.

I don't grasp what you mean, either by the "captures the result" 
statement, or the modifier statement. I thought that the [\w|\s]+  was 
'word or space in any quantity', which would capture either:

"CLEAN"

or

"SPAM REJECT"

Would you please re-write the statement in the context you meant?

> Did you consider using split() ?

...actually, no. Now that I think about it, that is how I do almost all 
other work that is like this.

To be honest, I was following a similar statement in another script that 
I thought I'd try my hand at custom regex with. I'm finding it 
exceptionally tedious and error prone. As I've been going through 
testing, I can't envision myself writing a regex that I can't see a 
potential to fail for :)

> while (<LOG>) {
>     chomp;
>     my ($result, $scantime, $ip, $from, $to)
>       = ( split /~/ )[2,3,5..7] or next;
> 
>     $result =~ s/\s+\(.+//;
>     chop $scantime;

I don't know why this flew right by me today. Thanks for the feedback.

I'm now off to write this in, with some checking so that my $ip lines up 
with an IP, and not with a piece of a subject line where someone threw 
in a rogue ~. (The delimiter is mine, I hacked Simscan to output that as 
it's delimiter for other custom reasons).

Thanks Gunnar,

Steve
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.