Regex have their place in all applications, but in different countries / languages you can add unnecessary complexity for micro-levels of processing.
Try the following:
<?php
$str = "Gowripuram West, Sengunthapuram Post, Near L.G.B., Karur, Tamilnadu, Karur - 639 002, India";
$res = substr($str,strpos($str, "," ,3), strpos($str,"\r"));
//this results in " Karur - 639 002, India";
$ruf = explode($res,"-");
//this results in
//$ruf[0]="Karur " $ruf[1]="639 002, India";
$city = $ruf[0];
$zip = substr($ruf[1],0,strpos($ruf[1], ",");
$country = substr($ruf[1],strpos($ruf[1],","),strpos($ruf[1],"\r"));
?>
. , ~