$re = '/[\+\-]+[\r\n](\|(\s+<info>[^<]+<\/info>\s+\|)+)[\r\n](\+|\-)+[\r\n]((\|(\s+[^\|]+\s+\|)+[\r\n])+)(\+|\-)+/m';
$str = '+--------+------+-------+
| <info>number</info> | <info>char</info> | <info>word</info> |
+--------+------+-------+
| 1 | a | alfa |
| 2 | b | beta |
| 3 | c | gamma |
+--------+------+-------+';
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