Sri Lanka, which made the fastest 10-over start to the tournament by racing to 79-0, lost its last nine wickets for 57 runs in 15.4 overs.
Sri Lanka recovered from a dramatic batting collapse to knock over Afghanistan for 152 and seal a 34-run win for its first victory at the Cricket World Cup on June 4. The Sri Lankans imploded from 144-1 to 201 all out in an innings delayed by nearly three hours because of rain at Sophia Gardens in the Welsh capital.
Chasing a revised target of 187 from a maximum 21 overs, Afghanistan slumped from 34-0 to 57-5 then battled back through a 64-run stand between Gulbadin Naib (23) and Najibullah Zadran (43).
Sri Lanka again responded and took the final five wickets for 31 runs, with recalled seamer Nuwan Pradeep getting 4-31.
The 1996 World Cup winner lost its opening group game to New Zealand by 10 wickets. Afghanistan has two defeats from two matches, after a loss to Australia on Saturday.
The error-strewn match in Cardiff featured 52 extras - Sri Lanka's 35 was the second-highest scorer in the scorecard - to strengthen the feeling this was a contest between the two teams likely fighting to avoid last place in the 10-team group.
The Afghans' only win at a World Cup remains the one over Scotland in 2015 but they'll feel this match slipped from their grasp, especially when Sri Lanka was reeling at 159-6 after three wickets in one over from Mohammad Nabi.Sri Lanka, which made the fastest 10-over start to the tournament by racing to 79-0, lost its last nine wickets for 57 runs in 15.4 overs.The Great Diwali Discount!
Unlock 75% more savings this festive season. Get Moneycontrol Pro for a year for Rs 289 only.
Coupon code: DIWALI. Offer valid till 10th November, 2019 .