過去完成式(Past Perfect):句型、用法、例句與練習

「我到捷運站時,末班車已經開走了。」想用英文說出這種「某件事在另一件事之前就已經發生」的情況,就要用到過去完成式(past perfect tense)。這篇文章會從 had + 過去分詞的句型開始,帶你搞懂 5 種常見用法、判斷該不該用的 3 個步驟,以及它和過去式、現在完成式的差別,最後再用練習題確認自己真的學會。

簡單來說,先發生的事用過去完成式,後發生的事用過去式,句型是 主詞 + had + 過去分詞(p.p.)。像開頭那句話,英文就是 When I got to the MRT station, the last train had already left.

過去完成式是什麼?用時間軸看懂「過去的過去」

把時間想成一條線:最右邊是現在,往左是過去。如果過去有兩件事,比較靠左、也就是先發生的那一件,就用過去完成式。所以這個時態一定需要一個過去的參考點,可能是另一件事(I got to the station),也可能是一個時間點(by 9 p.m.)。

反過來說,如果句子裡只有一件過去的事,就算發生在很久以前,也只要用過去式,不需要 had。英文文法書常把這個時態寫成 past perfect 或 past perfect simple,指的都是同一件事。

過去完成式句型:肯定、否定、疑問

句型結構例句
肯定句主詞 + had + p.p.She had finished the report by noon.
她中午前就把報告寫完了。
否定句主詞 + had not(hadn’t)+ p.p.I hadn’t heard the news until Mom called.
直到媽媽打電話來,我才聽到這個消息。
疑問句Had + 主詞 + p.p.?/疑問詞 + had + 主詞 + p.p.?Had you eaten before class started?
上課前你吃過東西了嗎?
過去完成式的公式

使用這個句型時,有幾點要注意:

  • 不管主詞是 I、he 還是 they,一律用 had。
  • 口語常把 had 縮寫成 ’d(I’d、she’d)。
  • 不規則動詞要用第三態,例如 go → went → gone。不熟的話可以先複習動詞三態和過去分詞。

過去完成式用法:5 種常見情境

過去的兩件事,交代誰先發生

這是最常見的用法:先發生的動作用過去完成式,後發生的動作用過去式,這樣事情的先後順序就很清楚。

例如:

  • By the time we arrived, the movie had already started.
    我們到的時候,電影已經開演了。
  • I had never tried stinky tofu before I moved to Taipei.
    搬到台北之前,我從沒吃過臭豆腐。

在過去某個時間點之前已經完成

常和「by + 過去時間」一起出現。

例如:

  • By 9 p.m., I had finished the presentation slides.
    晚上九點前,我就把簡報做完了。
  • By the end of 2025, the company had opened five stores in Taiwan.
    到 2025 年底,這家公司已經在台灣開了五家店。

某個狀態一直持續到過去某個時間點

常搭配 for、since(用法可參考 since 用法),以及 know、have、be、live 這類表示狀態的動詞。

例如:

  • When Mei graduated, she had known her best friend for ten years.
    小美畢業時,已經認識她的好朋友十年了。

間接引述時的時態後退

轉述別人的話時,如果用的是 said、told 這類過去式動詞,原句的現在完成式或過去式通常要往後退一格,變成過去完成式。

例如:

  • 直接引述:He said, “I have finished the project.”
  • 間接引述:He said (that) he had finished the project.
    他說他已經把專案做完了。

與過去事實相反的假設(wish/if)

在 wish、if only 後面,或第三類 if 條件句的 if 子句裡,用過去完成式表達「過去其實沒發生、帶點遺憾」的事。

例如:

  • I wish I had studied harder for the GEPT.
    真希望當初準備全民英檢時有更用功。
  • If we had left earlier, we wouldn’t have missed the train.
    要是我們早點出門,就不會錯過火車了。

想把假設語氣一次弄懂,可以接著看 If 條件句的用法與練習。

怎麼判斷要不要用過去完成式?3 個步驟

步驟 1:找出過去的參考點。 句子裡有兩件過去的事,或一件事加上一個過去時間點嗎?沒有的話,用過去式就好。

步驟 2:分出先後。 先發生、而且和後面那件事有關的動作,才用 had + p.p.。

步驟 3:看先後順序是否已經很清楚。 如果 after 或 before 已經把順序講明白,母語人士常常兩邊都用過去式,例如 After she paid, she left the store. 改用過去完成式也沒錯,只是更強調「已經做完」。

另外,「before + 過去完成式」還能表示某件事還沒來得及完成:She left before I had finished my sentence.(我話還沒說完,她就走了。)

常見的訊號字如下,這些字帶出的多半是副詞子句:

訊號字在句中的位置例句
by the time + 過去式主要子句用過去完成式By the time I woke up, my roommate had left.
我醒來時,室友已經出門了。
already/just/never…before放在 had 和 p.p. 中間I had never seen snow before that trip.
那次旅行之前,我從沒看過雪。
Hardly/Scarcely…when、No sooner…than倒裝:Hardly had + 主詞 + p.p. + when + 過去式No sooner had he arrived than it started to rain.
他一到,就開始下雨了。
過去完成式的識別標誌

想看兩個動作緊接著發生的寫法,也可以參考 as soon as 用法。

過去完成式例句:和過去式、現在完成式、過去完成進行式比一比

這四種時態都和過去有關,差別主要在「參考點」放在哪裡。

時態參考點與句型例句
過去式過去某個時間・主詞 + 動詞過去式I lost my wallet yesterday.
我昨天弄丟了錢包。
過去完成式另一個過去時間點之前・主詞 + had + p.p.I had lost my wallet before I got on the bus.
上公車前,我的錢包就已經掉了。
現在完成式連結到現在・主詞 + have/has + p.p.I have lost my wallet.
我的錢包掉了(到現在還沒找到)。
過去完成進行式持續到過去某個時間點,強調過程・主詞 + had been + V-ingI had been looking for my wallet for an hour when Mom called.
媽媽打來時,我已經找錢包找了一個小時。

跟過去式比: 過去式只是陳述發生過的事;過去完成式則替兩件過去的事排出先後。

跟現在完成式比: 現在完成式以「現在」為參考點,過去完成式以「過去某個時間點」為參考點。

跟過去完成進行式(past perfect continuous)比: 過去完成式重在「已經做完」的結果,過去完成進行式重在「持續了多久」的過程。

閱讀更多:現在完成進行式

過去完成被動式怎麼寫?

句型是 主詞 + had been + p.p.,也就是把被動語態的 be + p.p. 套進過去完成式。

例如:

  • The report had been sent before the meeting started.
    會議開始前,報告就已經寄出去了。
  • By the time we arrived, all the concert tickets had been sold.
    我們到的時候,演唱會門票已經賣光了。

過去完成式常見的 4 個錯誤

只有一件過去的事,卻用了 had

例如「我去年去了台南」,句子裡只有一件過去的事,直接用過去式 I visited Tainan last year. 就好。寫成 I had visited Tainan last year. 反而會讓人以為後面還有另一件事。

had 後面接了過去式

had 後面一定接過去分詞,不是過去式。I went to bed after my mom had came back. 要改成 had come back,不規則動詞特別容易寫錯。

和 ago 一起用

ago 是從「現在」往回算,通常搭配過去式,要說 I finished it two days ago,而不是 I had finished it two days ago。如果要表達「在過去某個時間點的兩天前」,就改用 before,例如 She said she had finished it two days before.

if 假設句前後時態對不上

談過去沒發生的事時,if 子句用過去完成式,主要子句用 would / could have + p.p.(would 的其他用法可參考 Would 用法)。If I had enough money, I could have bought a new phone. 前半句的時態不對,應該寫成 If I had had enough money, I could have bought a new phone.

過去完成式練習題(附解答)

練習 1:用括號內動詞的正確形式填空

  1. By the time we got to Taipei Main Station, the high-speed train ______ (leave).
  2. I ______ (never / visit) Alishan before last spring.
  3. When Kevin logged in, the online meeting ______ (already / start).
  4. My mom ______ (not / see) my message until she got home.
  5. ______ you ______ (finish) the report before the manager asked for it?
  6. Amy said that she ______ (lose) her EasyCard.
  7. We ______ (live) in Kaohsiung for ten years before we moved to Taichung.
  8. We ______ (find) a seat at the night market only after we ______ (wait) for 20 minutes.
  9. The report ______ (send) before the meeting started.
  10. I wish I ______ (book) the tickets earlier.

練習 2:依提示改寫句子

  1. Jason finished his homework. Then he played video games. (After…)
  2. The movie started. Then we arrived at the theater. (When…)
  3. I didn’t bring an umbrella, so I got wet. (If…)
  4. The store closed before we got there. (By the time…)
  5. As soon as she sat down, the bus left. (Hardly…)

練習 1 解答:

  1. had left:到台北車站(過去)之前,高鐵已經開走。
  2. had never visited:到去年春天為止都沒去過,表示到過去某時的經驗。
  3. had already started:Kevin 登入時,會議早已開始。
  4. hadn’t seen:直到媽媽回家前,一直沒看到訊息。
  5. Had … finished:疑問句把 had 放到主詞前面。
  6. had lost:said 為過去式,引述內容的時態往後退。
  7. had lived:在搬到台中之前,已經在高雄住了十年。
  8. found/had waited:先等了 20 分鐘,之後才找到位子。
  9. had been sent:報告是「被寄出」,用過去完成被動式。
  10. had booked:wish 後面用過去完成式,表示對過去的遺憾。

練習 2 解答:

  1. After Jason had finished his homework, he played video games.
  2. When we arrived at the theater, the movie had (already) started.
  3. If I had brought an umbrella, I wouldn’t have gotten wet.
  4. By the time we got there, the store had closed.
  5. Hardly had she sat down when the bus left.

結語

總結來說,用過去完成式之前,先確認句子裡有沒有過去的參考點,再把先發生的動作寫成 had + p.p.。口說時 had 常縮成 ’d(I’d finished),很容易被吞掉,可以用 ELSA Speak 練習這類縮寫的發音。想把時態系統串起來,可以再看 12 種英文時態和過去進行式,或到英文文法合集挑其他主題複習。

參考資料: British Council LearnEnglish(英國文化協會的英語學習網站)– Past perfect

超值優惠活動|限時搶購中!