Предполагая, что ни константы, ни значения не содержат пробелов, это будет работать для данного примера:
$str = '(CONST1 value1 X.CONST2 value2 CONST3 (\VALUE3) X...)';
preg_match('/\((\S+)\s+(\S+)\s+.*?\.(\S+)\s+(\S+)\s+(\S+)\s+\(\\\\(\S+)\)/', $str, $m);
$arr = array();
for($i=1; $i<count($m);$i+=2) {
$arr[$m[$i]] = $m[$i+1];
}
print_r($arr);
output:
Array
(
[CONST1] => value1
[CONST2] => value2
[CONST3] => VALUE3
)
объяснение
\( : an open parenthesis
(\S+) : 1rst group, CONST1, all chars that are not spaces
\s+ : 1 or more spaces
(\S+) : 2nd group, value1
\s+.*?\. : some spaces plus any chars plus a dot
(\S+) : 3rd group, CONST2
\s+ : 1 or more spaces
(\S+) : 4th group, value2
\s+ : 1 or more spaces
(\S+) : 5th group, CONST3
\s+ : 1 or more spaces
\( : an open parenthesis
\\\\ : backslash
(\S+) : 6th group, VALUE3
\) : a closing parenthesis