ST. LOUIS -- Jack Flaherty got an extra day of rest and a chance to pitch against Milwaukee, and took advantage of both.
"As the season goes on, whether you are facing a team for the first time or for the third time, there's adjustments made on both sides," Flaherty said.
"Whoever I'm out there I'm pitching against, I'm pitching against."
The Cardinals won for the ninth time in 10 games and pulled within a half-game of the Brewers for the National League's second wild-card spot.
Milwaukee has dropped three of four.
Flaherty (7-6) gave up three hits, walked three and struck out seven. The Brewers had only two runners reach second base against the rookie, who has allowed two earned runs in his past 19 innings pitched.
Friday marked his third start against Milwaukee this year and fourth in his young career. In 18 innings this season, he's allowed two earned runs in 18 innings and struck out 29.
"He pitched well," Brewers manager Craig Counsell said. "He did a nice job."
Bud Norris earned his 24th save in 28 opportunities.
Freddy Peralta (5-4) went six innings, giving up three earned runs. He allowed three hits, walked three, and struck out five. It was his third loss in his last four decisions.
Wong made a nifty play to start the eighth by charging a hopper that bounded over pitcher Jordan Hick's head. Wong snagged the ball in his glove and made a hard sidearm throw to get Keon Broxton at first. That turned out to be important because the Brewers scored twice that inning and cut the lead to 3-2.
"I always take pride in my defense and when I can make great plays like that for the pitcher, that's always huge," Wong said. "To come up clutch was a big day for me."
He capped his night with a two-run double in the eighth to pad the Cardinals' lead to 5-2.
Jedd Gyorko hit his 10th home run of the season to open the fourth. The shot to left field gave the Cardinals a 3-0 lead.
The Brewers threatened a comeback in the eighth. They loaded the bases against Hicks, and Jesus Aguilar hit a two-run single to pull the score to 3-2 with one out. But Travis Shaw fouled out to left field and Jonathan Schoop's flair to shallow center field was caught by shortstop Paul DeJong.
Cardinals 1B Matt Carpenter was issued an intentional walk in the seventh and has reached base in 35 consecutive games. It's the longest such streak in the majors.
Brewers: OF Eric Thames was removed from the game before the bottom of the third inning with a sore right knee. The right fielder collided with center fielder Lorenzo Cain while making a catch in the bottom of the first. Manager Craig Counsell said after the game that Thames is day-to-day. ... C Manny Pina was held out of Friday's game as a precaution following a collision with the Cubs' Javier Baez on Wednesday. Counsell said Pina should be available for the remainder of the weekend series, but wanted to provide another day of rest for his left shoulder that was hurt when he dove back into second against the Cubs.
Cardinals: RHP Carlos Martinez (right shoulder strain) continues his rehab assignment and was available to work out of the Double-A Springfield bullpen on Friday. The Cardinals announced earlier in the week that Martinez, typically a starter, would serve as a reliever when he returns to St. Louis. The Cardinals hope to have him back next week . IF Yairo Munoz (right wrist sprain) begins his rehabilitation assignment in Springfield on Saturday. ... RHP Michael Wacha (left oblique strain) is headed to Palm Beach, Florida to begin a rehab assignment. He went on the DL on June 21.
Cardinals: RHP Miles Mikolas (12-3, 2.85) has won five consecutive games. He went seven innings in each of his last three starts and the Cardinals have lost just one of the past eight games in which he started.
More AP baseball: https://apnews.com/tag/MLBbaseball
Trout plays full game a day after landing rich deal
Angels manager Brad Ausmus likes to have his regulars play nine innings at least once in a spring training game and on Thursday, it was Mike Trout's turn against the Arizona Diamondbacks.
Pence makes Rangers' roster to start season
Veteran outfielder Hunter Pence, who went to spring training with the Rangers on a minor league contract, will be on the 25-man roster as the team's fourth outfielder on Opening Day.
Mets get all their offense from homers in win vs. Marlins
Brandon Nimmo hits two home runs and drives in four runs as Michael Conforto's hits a 2-run shot in the Mets' 6-0 win vs. the Marlins.
Mazzilli improving after being struck by foul ball
Yankees guest instructor Lee Mazzilli will remain hospitalized until at least Friday as a precaution after being struck on the head by a batted ball during batting practice on Wednesday.
Harper hits first home run as a Phillie
Bryce Harper launches a home run deep to right field, his first as a member of the Philadelphia Phillies.
Harper hits 1st Grapefruit League HRs with Phils
Bryce Harper hit his first two spring training home runs as a member of the Phillies on Thursday, ending the day 2-for-3 with a walk and a strikeout.