$re = '/("""(?:[^"\\\\]|\\\\.|\\\\\n)*"""|\'\'\'(?:[^\'\\\\]|\\\\.|\\\\\n)*\'\'\'|"(?:[^"\\\\\n]|\\\\.|\\\\\n)*"|\'(?:[^\'\\\\\n]|\\\\.|\\\\\n)*\'|\[=\[[\w\W]*?\]=\]|\[\[[\w\W]*?\]\])/m';
$str = 'local a = getInterface() --- get "interface" (match here is ok, but not necessary)
[[
multiline
string
"""
inside
""" (should not match the """ pattern
another
multiline]] (the outer multiline string should match)
local a = 0 -- silly\'\'\'comment (should not match the first \'\'\' and look down for closing \'\'\')
local a = \'\'\' ---this is a normal multiline string and not a comment
\'\'\' (should match this)
"""filler\'\'\'filler\\""" (this should match "" and "filler\'\'\'\\"" with a trailing " unmatched
"""filler\'\'\'filler\\"""" (This should match the entire line)';
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