$re = '/^((?P<matrix> *\\\\begin{(?<token>matrix|matrix\*|pmatrix|pmatrix\*|bmatrix|bmatrix\*|Bmatrix|Bmatrix\*|vmatrix|vmatrix\*|Vmatrix|Vmatrix\*|\\\\left|\\\\right)}(?:{c+})?\s(?:(?: *one|two|three){0,3} *(-?\d* *)?(?:& ?|(\\\\\\\\ *\n)))+ *\\\\end{\g<token>} *\s?)|\s*\$\s*(?P>matrix) *\$| *\$\$\s(?P>matrix) *\$\$|\s*\\\\\[\s*(?P>matrix) *\\\\\]|\s*\\\\\(\s*(?P>matrix) *\\\\\))$/m';
$str = '$$
\\begin{matrix}{ccc}
10000 & 4 & 3
1 & -2 & 4
1 & 2 & 5
\\end{matrix}
$$
$$
\\begin{pmatrix}
1 & 2 & 3 \\\\
1 & 2 & 4 \\\\
1 & 2 & -5 \\\\
\\end{pmatrix}
$$
$
\\begin{matrix}
1 & 2 & 3 \\\\
1 & 2 & -4 \\\\
1 & 2 & 5 \\\\
\\end{matrix}
$
\\[
\\begin{matrix}
1 & 2 & 3 \\\\
1 & 2 & 4 \\\\
1 & 2 & 5 \\\\
\\end{matrix}
\\]
\\(
\\begin{matrix}
1 & 2 & 3 \\\\
1 & 2 & 4 \\\\
1 & -2 & 5 \\\\
\\end{matrix}
\\)
\\begin{matrix}
1 & 2 & 3 \\\\
1 & 2 & 4 \\\\
1 & 2 & 5 \\\\
\\end{matrix}
\\(
\\begin{matrix}
1 & 2 & 3 \\\\
1 & 2 & 4 \\\\
1 & -2 & 5 \\\\
\\end{matrix}
\\]
';
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