[EMAIL PROTECTED] wrote:
> From: Rob Dixon [mailto:[EMAIL PROTECTED]
>> [EMAIL PROTECTED] wrote:
>>> 
>>> I have a string and I need to parse that string to check whether it is
>>> in required format or not. I have a Perl script which ask for user
>>> input. I have mentioned in the Perl script that input should be in the
>>> following format.
>>> 
>>> For example:-  1,2,3 OR 1 2 3
>>> 
>>> Which means that delimiter between these figures should be comma OR
>>> space. No any other character. I need all users to adhere that and if
>>> they not then they should exit.
>>> 
>>> Can somebody please give me reg. exp. which can be used to parse the
>>> string and check whether comma OR space is there or not as a delimiter
>>> and it should contain only numeric not alphabets.
>> 
>> It is very draconian to require exactly one space or comma as
>> separators. However this will do what you ask.
>> 
>> Rob
>> 
>> 
>> use strict;
>> use warnings;
>> 
>> my $re = qr/^
>>   \d+
>>   (?:
>>    (?:,\d+)* | (?: \d+)*
>>   )
>> $/x;
>> 
>> chomp (my $input = <>);
>> 
>> if ($input =~ $re) {
>>   print "ok\n";
>> }
>> else {
>>   print "invalid\n";
>> }
>
> if ($trig_np =~ m/\d,{1}\d|\d\s{1}\d/)
> 
> this what I did.

That is useless. If I typed

--=NONSENSE9 9NONSENSE=--

it would be accepted as valid. My code with Ruud's correction is the simplest
way to do what you describe. Like this


  my $re = qr/^
    \d+
    (?:
      (?:,\d+)* | (?:[ ]\d+)*
    )
  $/x;

If you expect only single-digit numbers then replace '\d+' with '\d' throughout.
If you only expect 1 through 9 then replace them with [1-9] instead.

Rob

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


Reply via email to