Philippine army kills 42 Islamist militants in battles in south