in reply to matching pattern question?

I do not understand your specification. You state that I want only the patterns that has more than 2 consecutive 1's in the string, no all 0's, no "010110" cases.

Please elaborate what you mean by "no all 0's" (a string that has more than 2 consecutive 1's can not have all 0's). Also what do you mean by "no '010110' cases"? ("010110" does not have more than 2 consecutive 1's).

You say that the output should be "01110","111". I assume you meant that "111" should be "1111" since "111" is not in the array.

Also please explain why "01001110" should not match. It contains 3 consecutive 1's.

The following regular expression works for your listed requirements (although I suspect that the requirements are not exhaustive).

if($string =~ /([01]*111[01]*)/){ print "$string\n" } #output #01110 #1111 #01001110

Replies are listed 'Best First'.
Re^2: matching pattern question?
by AnomalousMonk (Bishop) on Jun 07, 2011 at 16:35 UTC

    I, also, do not understand the OP, but zeroing in on the "I want only the patterns that has more than 2 consecutive 1's ..." portion as zek152 has, I would code the regex slightly differently (I don't understand the  [01]* bits):

    >perl -wMstrict -le "my @strings = qw(0110 1 11 01110 001 100 1111 01001110); my @three_or_more = grep { m{ 1{3} }xms } @strings; printf qq{'$_' } for @three_or_more; " '01110' '1111' '01001110'