Hi,

On Thu, Aug 15, 2013 at 6:29 AM, *Shaji Kalidasan* <shajiin...@yahoo.com>wrote:

> Greetings,
>
> Many thanks to Lawrence Statton, Shlomi Fish and Nathan Hilterbrand for
> your detailed explanation.
>
> Here is the complete working code after your suggestions
>
> Courtesy : Lawrence Statton and Shlomi Fish
>
> [code]
> use strict;
> use warnings;
> use utf8; #As suggested by Lawrence Statton
> binmode STDOUT,":utf8"; #As suggested by Lawrence Statton
>

  You probably want to use this:
   binmode STDOUT,":encoding(UTF-8)"; instead. Why? "*:utf8"*
  just marks the data as UTF-8 without further checking, while "
:encoding(UTF-8)" checks the data for actually being valid UTF-8. Please
read http://perldoc.perl.org/functions/binmode.html for more.


> while (<DATA>) {
>     #if block as suggested by Shlomi Fish
>     if(my($name, $phone, $address) = /^([a-zA-Z ]+):([\-\d]+):([\w, ]+)$/)
> {
>         #^([a-zA-Z ]+):([\-\d]+):([\w, ]+)$
>         #Modified the regular expression to match - (dash) as suggested by
> Lawrence Statton
>         print "Name : $name\n" if defined $name;
>         print "Phone : $phone\n" if defined $phone;
>         print "Address : $address\n" if defined $address;
>     } else {
>         print "Did not match the regex\n";
>     }
>
> }
>
> __DATA__
> Sachin Tendulkar:408-724-0140:23, Brooke Street, Sunnyvale,CA 94088
> Mahendra Singh Dhoni:408-456-1234:76, Charles Street, Washington, MA 02131
> Rahul Dravid:408-253-3122:123, Queens Street, Canberra, Australia
> Virendar Sehwag:293-259-5395:15 Hilton Avenue, Sydney, Australia
> [/code]
>
> [output]
> Name : Sachin Tendulkar
> Phone : 408-724-0140
> Address : 23, Brooke Street, Sunnyvale,CA 94088
> Name : Mahendra Singh Dhoni
> Phone : 408-456-1234
> Address : 76, Charles Street, Washington, MA 02131
> Name : Rahul Dravid
> Phone : 408-253-3122
> Address : 123, Queens Street, Canberra, Australia
> Name : Virendar Sehwag
> Phone : 293-259-5395
> Address : 15 Hilton Avenue, Sydney, Australia
> [/output]
>
> best,
> Shaji
>
> -------------------------------------------------------------------------------
> Your talent is God's gift to you. What you do with it is your gift back to
> God.
>
> -------------------------------------------------------------------------------
>
>   ------------------------------
>  *From:* Lawrence Statton <lawre...@cluon.com>
> *To:* beginners@perl.org
> *Sent:* Wednesday, 14 August 2013 10:17 PM
> *Subject:* Re: Help on regex
>
> On 08/14/2013 11:26 AM, *Shaji Kalidasan* wrote:
> >    my ($name, $phone, $address) = /^([a-zA-Z ]+):([\-\d]+):([\w, ])$/;
>
> And here is your second problem ...
>
> the "name" part matches.
>
> The phone-number part matches if you either fix the numbers in the
> source data, or allow — in the regexp
>
> THe address part will only match if the remainder of the string after
> the second colon is exactly ONE character in the set [\w, ]
>
> Adding a single plus to make /^([a-zA-Z ]+):([\-\d]+):([\w, ]+)$/
> will work if you fix the input data.
>
> Adding a — to your regexp will work with the existing data
>
> adding
> use utf8;
> binmode STDOUT,":utf8";
>
> will stop sqawks about wide-character printing
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>
>
>


-- 
Tim

Reply via email to