$re = '/test2(?:\n.*test[234])*?\n.*test4/m';
$str = ' 1 test1
2 test2
5 test5
6 test1
7 test2
8 test3
9 test4
10 test5
11 test1
12 test2
13 test3
14 test4
15 test5
1 test1
2 test2
5 test5
6 test1
7 test2
8 test3
9 test4
10 test5
11 test1
12 test2
13 test3
14 test4
14 test4
14 test4
15 test5';
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