Balaji thoguluva wrote:

>      I am a novice to perl programming. When I execute the following code, I get 
> always "No Match". I guess my reg-exp is correct.
I also tried changing $line= "INVITE sip:[EMAIL PROTECTED] SIP/2.0"; to have double 
quotes and a backslash char before @ symbol.
Even then it gives me No Match. I appreciate your help.
>
> #!/usr/bin/perl -w
> my $line= 'INVITE sip:[EMAIL PROTECTED] SIP/2.0';
> if($line =~ /^\s*(\w+)\s*(.*)\s+(sip\/\d+\.\d+)\s*\r\n/i)
> {
>     print "\nSIP Method: ",$1;
>     print "\nRequest URI: ",$2;
>     print "\nSIP Version: ",$3;
> }
> else
> {
>     print "No Match";
> }

The string you show, as others have pointed out, has no "\r\n" terminator.
Even if you're pulling your record from a text file, Perl will try hard
to change all platforms' line terminators to a simple "\n" in the record
you actually read. And even having said that, there's no reason to match /all/
of the string if you're just extracting sub-fields: it's unlikely to help to
be told that your record doesn't actually end in /\s*\r\n/. I think your regex
should look like this:

  my $line= 'INVITE sip:[EMAIL PROTECTED] SIP/2.0';
  $line =~ /^\s*(\w+)\s+(.*)\s+(sip\/\d+\.\d+)/i;

  print map "$_\n", $1, $2, $3;

**OUTPUT

  INVITE
  sip:[EMAIL PROTECTED]
  SIP/2.0

HTH,

Rob



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


Reply via email to