Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Soliciting Multiline SIP Searching Suggestions

by kyle (Abbot)
on Mar 17, 2008 at 21:23 UTC ( [id://674652]=note: print w/replies, xml ) Need Help??


in reply to Soliciting Multiline SIP Searching Suggestions

I got your expression to work on your test data with a couple of small changes, but if you have a huge file full of that stuff, you probably want something a little different. In particular, you want to keep .* from matching more than one record at once. Here's what I came up with:

use strict; use warnings; $_ = <<'END_SIP_LOG'; From: "Bungalo Bill" <sip:5555555555@11.11.11.111:22>;tag=SD223sd2-312 +33dss^M To: <sip:6666666666@11.11.11.111:22>^M Call-ID: SD0e1af02-4d8d3eesdfsdfsd44w5f6fdb77814d-h6030fd^M END_SIP_LOG ; s/\^M/\r/g; my $NAME = 'Bungalo Bill'; my $INBOUND_NUMBER = '6666666666'; #my ($callid) = /From.*$NAME.*$INBOUND_NUMBER.*Call-ID:\s(.*)/s; my ($callid) = m{ From: \s "\Q$NAME\E" .*? \r \n? To: \s <sip: \Q$INBOUND_NUMBER\E \@ .*? \r \n? Call-ID: \s (\S+) .*? \r \n? }xms; print "callid = '$callid'\n"; __END__ callid = 'SD0e1af02-4d8d3eesdfsdfsd44w5f6fdb77814d-h6030fd'

I'm not sure if you have straight \r as line endings or the more likely \r\n, so the pattern matches either one.

Updated to format the pattern prettier.

Replies are listed 'Best First'.
Re^2: Soliciting Multiline SIP Searching Suggestions (.*)
by tye (Sage) on Mar 17, 2008 at 23:38 UTC

    /.*?/s isn't enough to prevent that part of the regex from gobbling up multiple lines and also backtracking pathologically. For example, your regex will incorrectly match (after you fix \r \n? to \r? \n or just \n):

    From: "Bungalo Bill" ... To: (wrong number) Call-ID: (wrong call) ... From: "Wrong Person" ... To: <sip:66666­66666@...> Call-ID: ThisIsTheWrongCallID

    - tye        

      Good catch! If lines do end in \n, the fix is easy. Just remove the /s option. Then /./ won't match the newline. The .* parts match to the end of the line (as they're supposed to) and won't go any further. If lines are terminated in \r, I'd have to change .* to [^\r]* instead.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://674652]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (9)
As of 2024-04-23 21:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found