雖然坎尼戰役為軍事史上的一場大捷,迦太基軍的優勢在此戰已達至最高峰,
儘管羅馬人損失了大量資源,失去了很多盟邦,並要面對馬其頓與敘拉古的入侵,
但是漢尼拔軍隊仍不足以攻克羅馬城。於是,漢尼拔派一個代表團到羅馬談判和平,
提出贖金的要求來釋放羅馬戰俘,羅馬元老院拒絕了所有的提議。
羅馬人面對嚴重危機,解放了城中的奴隸,又徵召士兵積極備戰。
原本準備派往西西里的羅馬將軍馬克盧斯(Marcus Claudius Marcellus)被迅速召回,
他是曾經和敵軍國王單挑而贏得戰爭的"羅馬之矛"。而"羅馬之盾"費邊在羅馬街頭,
保證羅馬會得到最終勝利,安慰羅馬人民。
漢尼拔並未進軍羅馬城,而是轉向半島南部打擊羅馬的盟友,
破壞羅馬的統治根基,開始了迦太基和羅馬在義大利南部的爭奪戰。
坎尼會戰結束後,阿普利亞(Apulia)的大城阿爾庇(Arpi)馬上投靠漢尼拔,
一些城市投降,也有一些城市拒絕,漢尼拔進軍坎帕尼亞,
人口規模僅次於羅馬的卡普阿(Capua)也投降於漢尼拔。
前216年,在這種絕望的局勢中,發生第一次諾拉戰役,馬克盧斯(Marcus Claireius
Marcellus)領導的羅馬軍隊成功防衛諾拉(Nola)(位於卡普阿東南約20km),
漢尼拔試圖奪取諾拉卻失敗,這鼓舞了羅馬人民。
而接者在前215年,第二次諾拉戰役,漢尼拔第二次試圖奪取諾拉,
但他再次被擊退,前214年,第三次諾拉戰役,馬克盧斯再次成功地阻止。
前215年羅馬選舉費邊為執政官,費邊當選後繼續執行他的戰術,
主要進攻那些背叛羅馬的城市,而避免與漢尼拔正面交鋒。
前214年費邊連任了執政官。馬克盧斯前往西西里島,平定反抗羅馬的幾個城市。
其中對敘拉古(Syracuse)的圍困持續了兩年,
部分原因是被著名發明家阿基米德的軍事機器所挫敗,但最後在前212年夏天,
還是攻下了敘拉古。而馬克盧斯的其他手下也平定了西西里島。
前213年,小費邊(Quintus Fabius Maximus)當選為執政官,
羅馬此時有軍隊20萬人以上,其中8萬人跟在漢尼拔附近。
雖然漢尼拔的兵力也許還不到4萬人,但是羅馬軍卻不與他正面決戰。
前213年初春,費邊攻打阿爾庇(Arpi),趁著一場雷雨向阿爾庇守軍發起突襲,
攻占了一座城門。雙方進行一場長時間的巷戰,打得精疲力竭。
在停戰期間,羅馬人說服了阿爾庇歸順羅馬。
此時漢尼拔無意與人數遠占優勢的羅馬軍團交鋒。前213年夏,
漢尼拔轉移目標向塔蘭托(Taranto)進軍
前212年,小費邊留在了阿爾庇(Arpi)固守
前212年,有人內應使漢尼拔攻下塔蘭托(Taranto),
但是殘餘的羅馬軍退往港口的要塞,所以漢尼拔還是無法使用港口
前212年夏天,羅馬的馬克盧斯還是攻下了西西里島敘拉古
前212年,第一次卡普阿之戰,羅馬發動了8個軍團攻打卡普阿。
漢尼拔從塔蘭托趕來救援,擊敗了一些外圍的羅馬軍隊,
羅馬圍困軍隊暫時撤走,解除了卡普阿的圍困。而羅馬執政官
Quintus Fulvius Flaccus 和 Appius Claudius Pulcher各自率部,
朝著不同方向離去。他們的各自軍力仍然超過了漢尼拔的軍隊,
漢尼拔決定跟隨Claudius。此時有一位叫馬庫斯(Marcus Centenius)
說他可以打敗漢尼拔,而羅馬元老院同意他,
於是馬庫斯率領16000人開始追擊漢尼拔。但是卻被漢尼拔
在Silarus(現今那不勒斯東南60km)伏擊全滅,而在Silarus戰役之後,
漢尼拔沒有追隨Claudius的軍隊,而是向東進入阿普利亞。
此時Praetor Gnaeus Fulvius Flaccus的軍隊在阿普利亞有一個相當的時間,
不知道漢尼拔已來Herdonia(現今福賈Foggia南方10km),
第一次Herdonea 戰役中Flaccus沒有了解迦太基人的部署,
前去進攻而被陷入包圍全滅。在幾週的時間裡,
漢尼拔已經在坎帕尼亞和阿普利亞消滅了6個羅馬軍團。
在這場戰役之後,漢尼拔向南走向塔蘭托Tarentum,圍困在城堡的羅馬人,
在這個時期,漢尼拔看起來是無敵的,在高盧南部有盟友,擁有西班牙,
也爭取到義大利南部和西西里島的一些城市,
馬其頓國王腓力五世也承諾對漢尼拔的支持(雖然從未到過)。
然而,漢尼拔的成功並不持久。羅馬馬上集結4個新軍團送到阿普利亞,
繼續掃蕩背叛的城市。而漢尼拔既然已經離去卡普阿,
當時退走的羅馬將領很快重新組建了卡普阿的包圍,
從前212年冬天一直到前211年春天,羅馬在卡普阿城周圍築起兩道土壘,
把這座城市徹底封鎖起來。
前211年,羅馬第二次圍困卡普阿,漢尼拔接到卡普阿的告急時正在塔蘭托。
他留下重裝部隊,親自率領一支精銳部隊趕往坎帕尼亞。
他發現羅馬軍隊在卡普阿周圍堅固的工事裡。
漢尼拔試圖把他們引出工事進行會戰,儘管羅馬軍隊比漢尼拔多一倍,
羅馬軍還是不肯從工事中出來。漢尼拔沒有攻城器械,糧草也不足,
無法駐紮等待。
因此,他決定威脅羅馬城,試圖把羅馬軍隊從卡普阿周圍的陣地上引開。
漢尼拔到達羅馬城外,羅馬的城防軍嚴陣以待,也有羅馬軍尾隨而來。
漢尼拔只停留了幾天,他估計羅馬軍已離開卡普阿的包圍工事並趕來增援羅馬,
於是他返回卡普阿。等到他走近卡普阿,
他才發現圍城的羅馬軍根本就沒有離開過他們的工事。
當漢尼拔確實無法從外解除圍城之後,卡普阿最終因飢餓而被迫投降。
卡普阿的投降,使南義大利的城市了解到漢尼拔無法保護他們,
羅馬也平定了西西里島。同時馬其頓腓力五世也在四面圍攻之下向聯軍臣服。
前211年,老西庇阿在西班牙作戰時,死於與漢尼拔的弟弟哈斯德魯巴的戰役。
前211年秋,尼祿(Gaius Claudius Nero)奉命率領一個軍團的兵力赴西班牙,
鞏固當地狀況
前210年,大西庇阿主動要求指揮其父遺下的西班牙羅馬軍隊。
前209年初夏,大西庇阿登陸西班牙並佔領新迦太基成為據點,
到前206年秋,大西庇阿已征服了全部西班牙
前210年年初,馬克盧斯從西西里切換掌控阿普利亞的羅馬軍隊,
首先,馬克盧斯準備奪取薩拉皮亞(Salapia),然後繼續征服的其他城市。
而漢尼拔再次展現其戰略天分,在阿普利亞地區第二次Herdonea 戰役
(現今福賈南方10km),重挫另一支羅馬軍,
當Gnaeus Fulvius Centumalus Maximus的軍隊被漢尼拔徹底摧毀時,
馬克盧斯也奪取薩拉皮亞。馬克盧斯繼續保持對漢尼拔的防守,
一邊收復阿普利亞的城市,兩軍雖然激戰,但從未到全軍的決戰。
前210年到前209年,漢尼拔與馬克盧斯(Marcus Claudius Marcellus)
進行長達一年的膠著對戰,以控制阿普利亞。
結果是沒有一方獲得決定性的勝利,而雙方兵力也遭受了相當大的損失。
前209年費邊再次當選為執政官,進行了他最後一次重大戰役,
費邊受命奪回塔蘭托(Taranto),費邊採用佯攻策略,先派出一支的軍隊,
進攻塔蘭托附近的另一座迦太基控制下的城鎮,
同時馬克盧斯也遲滯漢尼拔離開阿普利亞,然後漢尼拔前去援救時,
費邊拿下了塔蘭托。至此漢尼拔幾乎喪失了其對義大利南部大部分的控制。