Moyer had faced the minimum 20 batters when
Moyer (3-1) struck out five and walked two in 7 1/3 shutout innings, leaving the field to a standing ovation.
"It was a fun game to pitch," Moyer said. "I was throwing my breaking pitches for strikes, that's big for me. Things really started to fall into place as the game went along. It was fun."
Jayson Werth made a key defensive play in left field and had a two-run single for the Phillies, who have won seven of their last nine games. Moyer went 2-for-3 with a double but it was his pitching that dazzled against the Marlins.
"He was amazing, even with the bat," reliever Brett Myers said.
The crafty 44-year-old mixed up a fastball that topped out at 82 mph with an array of cutters, changeups and curveballs that frustrated the Marlins throughout the game.
"I was just sitting there and enjoying watching it," Phillies manager Charlie Manuel said. "He's a professional and you couldn't have a better teammate or a better guy on the mound than Jamie."
Moyer's low-hit game for his career was a two-hitter on Aug. 16, 1986, at Montreal when he played for the Chicago Cubs.
"He pitched his game, the same game he has pitched for the last 20 some years or so," Florida manager Fredi Gonzalez said. "He puts a little on, then takes a little off. He's always mixing up his pitches and never gives in."
Moyer gave up a leadoff walk to Aaron Boone in the eighth. He struck out Cody Ross but yielded a single to Joe Borchard. Manuel then brought in Myers, who fanned Miguel Olivo and Mike Jacobs to end the threat.
Moyer retired the first nine batters he faced, including six on flyouts.
After Hanley Ramirez coaxed a leadoff walk in the fourth, Moyer got a huge boost from his defense when Werth made a sensational catch to rob Cabrera of a hit.
Cabrera drove a pitch to deep left. Werth chased it down, making a fully extended snowcone catch on the warning track. Werth crashed into the wall, but recovered quickly and easily doubled up Ramirez at first base.
Werth also delivered a key two-run single in the sixth, driving in Rollins and Utley to make it 3-0.
"It's been the biggest situation I've been in here so far, it was intense," said Werth, who signed with the club as a free agent over the winter.
Obermueller gave up three runs and five hits in 5 2/3 innings. He struck out four, walked two and hit two batters with pitches.
"That's my goal every time I go out, I want to keep the team in the game," Obermueller said.
- Philadelphia's Aaron Rowand went 0-for-3, halting his career-high hitting streak at 16.
- The Phillies were 4-for-4 on stolen-base attempts, including two by Rollins.
- It was a sellout crowd of 45,107 at Citizens Bank Park, the largest of the season and the fifth largest in the history of the park.