Christian Eriksen 's stoppage-time free-kick secured Inter Milan a dramatic 2-1 Coppa Italia win over AC Milan in which Zlatan Ibrahimovic got into a spat with Romelu Lukaku and was later sent off.
An eventful outing for Ibrahimovic saw him put the Rossoneri ahead in the derby with a 31st-minute strike.
The 39-year-old then got involved in a heated exchange with his former Manchester United team-mate Lukaku just before half-time.
The pair, who at one point had their heads pressed against each other, were both booked - and Ibrahimovic subsequently received a second yellow card and his marching orders just prior to the hour mark following a foul on Aleksandar Kolarov.
Lukaku then drew things level with a penalty in the 71st minute, before substitute Eriksen sent a free-kick past Ciprian Tatarusanu in the seventh minute of time added on.
Inter's semi-final opponents will be the winners of Wednesday's clash between Juventus and SPAL.
In the Copa del Rey, Villarreal advanced into the last eight with a 1-0 win at second-tier Girona secured by Yeremi Pino 's 19th-minute goal.
Real Betis beat Real Sociedad 3-1 at home after two goals from Borja Iglesias in extra time.
The visitors took the lead through Mikel Oyarzabal in the 13th minute, then had Asier Illarramendi sent off shortly after the break.
Betis were then reduced to 10 men themselves in the 75th minute by Antonio Sanabria 's dismissal but Sergio Canales equalised moments later to take the contest into extra time.
Levante are also through following a 4-2 win at Real Valladolid.
After Toni Villa 's early opener for the hosts, goals from Enis Bardhi and Mickael Malsa had Levante 2-1 up heading into the interval.
Coke extended the advantage just before the hour mark, Valladolid hit back six minutes later though Shon Weissman, and Jose Luis Morales then added Levante's fourth with an 80th-minute penalty.