Afghanistan bowled well to dismiss the 1996 World Cup champions for just 201.
But faced with a rain-revised target of 187 in 41 overs under the Duckworth-Lewis method, Afghanistan — bidding for just their second win in a World Cup match and first over a Test nation — slumped to 152 all out.
Nuwan Pradeep took four for 31 while veteran quick Lasith Malinga (three for 39) ended the match when a trademark yorker bowled Hamid Hassan.
Earlier, Afghanistan captain Gulbadin Naib won the toss and sent Sri Lanka into bat, hoping to take advantage of the favourable conditions for bowlers. But openers Karunaratne and Kusal Perera settled quickly as they shared a stand of 92 for the out-of-form side.
Afghanistan s bowlers struggled to stop the flow of runs, with Hassan withdrawn from the attack after conceding 30 runs from just two overs. Sri Lanka s charge was initially slowed when captain Karunaratne was caught by Najibullah Zadran at long-on off Nabi but there were no signs of the clatter of wickets to come. Both sides were soundly beaten in their first matches of the tournament in England and Wales.
Former champions Sri Lanka were thumped by 10 wickets by New Zealand on the same ground while Afghanistan went down by seven wickets to defending champions Australia in Bristol. Afghanistan, playing in only their second World Cup, beat 1996 world champions Sri Lanka soundly in last year s Asia Cup in the United Arab Emirates.
Sri Lanka have won only one of their 10 one-day international matches this year — against minnows Scotland.