You can also do it using the \K
feature (that refers to where the returned result begins) inside a lookbehind:
(?<=\K1)....1
demo
This way, you don't need to create a capture group, and since all characters are consumed (except the first that is in the lookbehind), the regex engine doesn't have to retry the pattern for the next five positions after a success.
$str = '001110000100001100001';
preg_match_all('~ (?<= \K 1 ) .... 1 ~x', $str, $matches);
print_r($matches[0]);
code
Note that if you are sure the second character is always a zero, using 0(?<=\K10)...1
is more performant because the pattern starts with a literal character and pcre is able to optimize it with a quick search of possible positions in the subject string.