Yes Psycho, it's probably the wrong way to cope with a similar problem.
My approach in this case will be to use NumberFormatter::Parse passing a specific locale such as it_IT in my case. Anyway, If and only if I will be in the situation requiring to implement a specific RegEx solution, in order to develop more robust data munging routines, my solution is going to be like the following:
$num = '4.335,67';
$fmt = numfmt_create( 'it_IT', NumberFormatter::DECIMAL );
if (is_numeric(preg_replace('/(?<=[\d])[\.,]/','${1}', $num)))
echo $fmt->parse($num);
else
echo "Wrong input!";
Please note that you either need to have PHP 5.3 > or you need to install it via PECL intl package 1.0.0. PHP 5.3+ has the support built in. Also have look to php.ini file to enable intl itself.
Regards.