$re = '/^(\d*0)\..*\n(?!\d*1\.|(?!\d))|
^(\d*1)\..*\n(?!\d*2\.|(?!\d))|
^(\d*2)\..*\n(?!\d*3\.|(?!\d))|
^(\d*3)\..*\n(?!\d*4\.|(?!\d))|
^(\d*4)\..*\n(?!\d*5\.|(?!\d))|
^(\d*5)\..*\n(?!\d*6\.|(?!\d))|
^(\d*6)\..*\n(?!\d*7\.|(?!\d))|
^(\d*7)\..*\n(?!\d*8\.|(?!\d))|
^(\d*8)\..*\n(?!\d*9\.|(?!\d))|
^(\d*9)\..*\n(?!\d*0\.|(?!\d))/mx';
$str = '1. And this is line one
2. So this is line two
4. I think I missed something here...
5. Carrying on.
6. Feeling cozy again.
8. Wait, I missed something again.
10. I just missed more somethings again.
13. Dude, what\'s happening?
14. Things are alright again.
15. Still good.
17. Whoops, bubble.
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php