The deal, which kicks in for the 2013-14 NHL season, will pay Staal $6 million per year, Carolina President and General Manager Jim Rutherford said.
"At 23 years old he is just starting to come into his prime, and he now represents a cornerstone of our franchise for the long term," he said.
Staal netted 25 goals and racked up 50 points over 62 regular season games for the Pittsburgh Penguins last season, adding six goals and nine points in a six-game first-round playoff loss to Philadelphia.
The Hurricanes acquired him in a June 22 trade, sending Brandon Sutter, Bryan Dumoulin and the eighth-overall pick in this year's draft to the Penguins.
Staal has amassed 120 goals and 248 points in 431 regular-season games, along with 23 goals and 36 points in 73 post-season appearances in his career.