Match ends, Cardiff City 3(1), Reading 3(4).
Reading fought back from 2-0 down in 90 minutes - and then hauled themselves level again in extra time - to overcome Cardiff City on penalties in an exhausting FA Cup fourth-round replay.
This was the teams' third meeting in 10 days - following 1-1 draws in the cup and Championship - and Josh Murphy put Cardiff in front with a fine low strike.
Robert Glatzel finished a flowing team move to double the hosts' advantage, but Omar Richards headed in for Reading to suggest this match was far from done.
So it proved as Andy Rinomhota equalised with a volley to force extra-time, during which Murphy pounced on an error by Royals centre-back Gabriel Osho to restore Cardiff's lead.
Then with five minutes left of extra time, Yakou Meite scored his third goal in three matches against Cardiff to take the game to a penalty shootout.
Aden Flint and Will Vaulks missed the Bluebirds' first two spot-kicks, giving Sone Aluko the opportunity to score Reading's fourth and seal a 4-1 shootout victory.
The Royals' reward is a home tie against Premier League Sheffield United in the fifth round.
What neither team had wanted here was extra-time and penalties, with Reading boss Mark Bowen admitting after Friday's 1-1 Championship draw at Cardiff City Stadium that there was a feeling of "familiarity breeding contempt" between the sides with their three meetings in 10 days.
The previous two fixtures had been remarkably similar. On both previous occasions Meite had given Reading the lead before Callum Paterson had equalised for Cardiff.
That particular scoring pattern was under threat on this occasion once Paterson was named on the bench, as the two sides made a combined 13 changes from Friday's Championship draw.
One of those restored to the Cardiff team was Murphy, a quick and skilful winger who cost £11m 18 months ago but whose confidence had been damaged by an inability to secure a regular place in the starting line-up this season.
He seemed a different player here, buzzing with intent as he ran at Reading's defenders and trying his luck with a long-range effort in the opening exchanges.
It was no surprise to see Murphy put Cardiff ahead, intercepting a careless pass from Reading's Charlie Adam and firing a left-footed shot into the bottom corner.
The hosts could have doubled their advantage a minute later but, after good work from Gavin Whyte, Danny Ward curled his effort over the bar.
Reading were slow getting themselves into the match, though they did eventually press Cardiff goalkeeper Neil Etheridge into action, first through George Puscas' header and then from an innovative and acrobatic flicked effort from Meite.
The Royals seemed to be out of contention, however, once Glatzel scored Cardiff's excellent second goal.
Sol Bamba set the move in motion as he stole possession and fed Will Vaulks, who played a one-two with Whyte before producing a beautiful lofted pass with the outside of his right boot to free Glatzel, who finished calmly.
Cardiff appeared to be in total control at this point, but they let their grip on the tie slip as their opponents mounted a terrific comeback.
Richards lit the touch paper for the revival with a thumping header from Tyler Blackett's cross, sparking a period of sustained Reading pressure.
Aluko went close with several efforts and it was another substitute, Rinomhota, who got the equaliser, demonstrating composure and sound technique to steady himself in the Cardiff penalty area before volleying firmly into the net.
It was the least the Royals' second-half effort warranted, though there was a distinct feeling nobody inside Cardiff City Stadium wanted this rivalry extended any further than the regular 90 minutes.
In any case, that is what happened and Murphy thought he might have won the game for the hosts when he seized on Osho's sloppy back-header to slide in ahead of Reading goalkeeper Sam Walker.
Vaulks had a golden opportunity to extend Cardiff's advantage but he blazed his shot over the bar, and that was to prove costly.
Meite had to wait for his customary goal against Cardiff, and it came four minutes before the end of extra time as he connected with a sweet volley from Jordan Obita's cross.
If the 120 minutes of open play were nip and tuck, Reading were clear winners in the shootout.
Cardiff missed both their first two penalties, Flint's saved by Walker and Vaulks' smashing against the crossbar, while Garath McCleary, Osho and Obita confidently converted the Royals' first three.
Marlon Pack just about squeezed in Cardiff's third despite a touch from Walker - but that was in vain as Aluko scored Reading's fourth to seal a 4-1 shootout win and their passage to the fifth round.
Cardiff City manager Neil Harris said: "We should have won the first game - we had about a million chances. We were 2-0 up and then 3-2 up here and sometimes it's not just meant to be.
"Some of the football we played in the first half was outstanding and there were positives with Murph [Josh Murphy] scoring two goals and two young lads making debuts which is big for our football club.
"But the goals we conceded were just not good enough. They were three goals from crosses. When you concede goals it's not just the back four - maybe it's concentration, but the players will be disappointed.
"I'd love to be in the fifth round. You put your hand up to take a penalty and sometimes the goalkeeper makes a save.
"We have been the better team in all three games with Reading and haven't won any of them."
Reading manager Mark Bowen said: "I'm delighted. I guess it had to come down to penalties to split the trilogy of games we've had against Cardiff.
"There were a few harsh words at half-time as we weren't anywhere near the standard required in the first half. I put demands on my players at half-time to show character, be brave on the ball and try to affect the game and they certainly did that in the second half.
"I've been quite lucky throughout my career with penalties so I'm a glass-half-full man. As soon as it went to penalties, I was confident."
- 39BaganSubstituted forBennettat 82'minutes
- 21RichardsBooked at 66mins
- 6VaulksBooked at 39mins
- 11MurphyBooked at 87mins
- 23WardSubstituted forPatersonat 77'minutes
- 20WhyteBooked at 75minsSubstituted forSangat 90'minutes
- 24BlackettSubstituted forObitaat 97'minutes
- 34OshoBooked at 81mins
- 27RichardsBooked at 87mins
- 26AdamSubstituted forMcClearyat 45'minutes
- 29Tuncará GomesSubstituted forRinomhotaat 63'minutesBooked at 99mins
- 47PuscasSubstituted forAlukoat 45'minutes
- Gavin Ward
- Shots on Target
Penalty Shootout ends, Cardiff City 3(1), Reading 3(4).
Goal! Cardiff City 3(1), Reading 3(4). Sone Aluko (Reading) converts the penalty with a left footed shot to the bottom right corner.
Goal! Cardiff City 3(1), Reading 3(3). Marlon Pack (Cardiff City) converts the penalty with a right footed shot to the bottom left corner.
Goal! Cardiff City 3, Reading 3(3). Jordan Obita (Reading) converts the penalty with a left footed shot to the centre of the goal.
Penalty missed! Still Cardiff City 3, Reading 3(2). Will Vaulks (Cardiff City) hits the bar with a right footed shot.
Goal! Cardiff City 3, Reading 3(2). Gabriel Osho (Reading) converts the penalty with a right footed shot to the bottom left corner.
Penalty saved! Aden Flint (Cardiff City) fails to capitalise on this great opportunity, right footed shot saved in the bottom left corner.
Goal! Cardiff City 3, Reading 3(1). Garath McCleary (Reading) converts the penalty with a right footed shot to the centre of the goal.
Penalty Shootout begins Cardiff City 3, Reading 3.
Second Half Extra Time ends, Cardiff City 3, Reading 3.
Tom Sang (Cardiff City) wins a free kick in the attacking half.
Foul by Andy Rinomhota (Reading).
Michael Morrison (Reading) wins a free kick in the defensive half.
Foul by Robert Glatzel (Cardiff City).
Attempt missed. Robert Glatzel (Cardiff City) header from the centre of the box is just a bit too high.
Josh Murphy (Cardiff City) wins a free kick in the defensive half.
Foul by John Swift (Reading).
Goal! Cardiff City 3, Reading 3. Yakou Meite (Reading) left footed shot from the centre of the box to the top left corner. Assisted by Jordan Obita.
Attempt missed. John Swift (Reading) right footed shot from outside the box is just a bit too high from a direct free kick.