$re = '/(?<katex_all>
(?:
(?<!\\\\|\$)
(?<katex_open>
\${2}
|
\${1}
)
(?!\$)
\n?
(?<katex_content>.+?)\n?
(?<!\\\\|\$)
(?<katex_close>\g{katex_open})
(?!\$)
\n?
)
|
(?:
(?<!\\\\)
(?<katex_open>\\\\\[)
\n?
(?<katex_content>.+?)\n?
(?<!\\\\)
(?<katex_close>
\\\\\]
)\n?
)
|
(?:
(?<!\\\\)
(?<katex_open>\\\\\()
\n?
(?<katex_content>.+?)\n?
(?<!\\\\)
(?<katex_close>
\\\\\)
)\n?
)
)/mxsJ';
$str = '$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$$
This is some text $math \\frac12$
other text $\\unsupported$
Other node \\[ displaymath \\\\[\\\\] \\frac{1}{2} \\] blah
$$ \\int_2^3 $$
more text \\(and math\\) blah
And $math with a
\\$ sign$.
This should not match↓
$$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$$$
This should not match either
$$
\\Gamma(z) = \\int_0^\\infty t^{z-1}e^{-t}dt\\,.
$
';
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