[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/