Hi punit,
On Wed, 11 Dec 2013 21:04:39 +0530
punit jain <[email protected]> wrote:
> Hi,
>
> I have a requirement where I need to capture phone number from different
> strings.
>
> The strings could be :-
>
>
> 1. COMP TEL NO 919369721113 for computer science
>
> 2. For Best Discount reach 092108493, from 6-9
>
> 3. Your booking Confirmed, 9210833321
>
> 4. price for free consultation call92504060
>
> 5. price for free consultation call92504060number
>
> I created a regex as below :-
>
> #!/usr/bin/perl
>
> my $line= shift @ARGV;
>
> if($line =~
> /(?:(?:\D+|\s+)(?:(91\d{10}|0\d{10}|[7-9]\d{9}|0\d{11})|(?:(?:ph|cal)(\d+))))|(?:(?:(91\d{10}|0\d{10}|[7-9]\d{9}|0\d{11})|(?:(?:ph|cal)(\d+)))(?:\D+|\s+))/)
> {
>
> print "one = $1";
>
>
> }
> It works fine for 1, 2,3 and prints number however for 4 and 5 one I get
> number in $2 rather than $1 tough I have pipe operator to check it.
>
> Any clue how to fix this ?
I suggest you use named captures (a feature of perl-5.10.x-and-above) and then
you can do something like:
my $my_capture = ($+{'capture1'} // $+{'capture2'});
I think this is the best way to do it. (You can also do $1 // $2, but please
don't).
Regards,
Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
The Case for File Swapping - http://shlom.in/file-swap
Why can’t we ever attempt to solve a problem in this country without having
a “War” on it? -- Rich Thomson, talk.politics.misc
Please reply to list if it's a mailing list post - http://shlom.in/reply .
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/