diff --git a/lib/banzai/filter/blockquote_fence_filter.rb b/lib/banzai/filter/blockquote_fence_filter.rb
index fb815c2d83701f5925f405fba5b434bdb015609b..d2c4b1e4d76914254d1ca6b8cd8e89269a06aaa5 100644
--- a/lib/banzai/filter/blockquote_fence_filter.rb
+++ b/lib/banzai/filter/blockquote_fence_filter.rb
@@ -5,35 +5,56 @@ module Banzai
           (?<code>
             # Code blocks:
             # ```
-            # Anything, including ignored `>>>` blocks
+            # Anything, including `>>>` blocks which are ignored by this filter
             # ```
-            ^```.+?\n```$
+
+            ^```
+            .+?
+            \n```$
           )
         |
           (?<html>
-            # HTML:
+            # HTML block:
             # <tag>
-            # Anything, including ignored `>>>` blocks
+            # Anything, including `>>>` blocks which are ignored by this filter
             # </tag>
-            ^<[^>]+?>.+?\n<\/[^>]+?>$
+
+            ^<[^>]+?>\n
+            .+?
+            \n<\/[^>]+?>$
           )
         |
-          (
-            ^>>>\n(?<quote>
+          (?:
+            # Blockquote:
+            # >>>
+            # Anything, including code and HTML blocks
+            # >>>
+
+            ^>>>\n
+            (?<quote>
               (?:
-                  (?!^```|^<[^>]+?>).
+                  # Any character that doesn't introduce a code or HTML block
+                  (?!
+                      ^```
+                    |
+                      ^<[^>]+?>\n
+                  )
+                  .
                 |
+                  # A code block
                   \g<code>
                 |
+                  # An HTML block
                   \g<html>
-              )
-            +?)\n>>>$
+              )+?
+            )
+            \n>>>$
           )
       }mx.freeze
 
       def initialize(text, context = nil, result = nil)
         super text, context, result
-        @text = @text.delete "\r"
+        @text = @text.delete("\r")
       end
 
       def call
diff --git a/spec/fixtures/blockquote_fence_after.md b/spec/fixtures/blockquote_fence_after.md
index 5ab136f76c304b1edfd08d8a5bd9c071a638ae0f..2652a842c0e343555553cccb70eb69a01708c73f 100644
--- a/spec/fixtures/blockquote_fence_after.md
+++ b/spec/fixtures/blockquote_fence_after.md
@@ -8,7 +8,7 @@ Single `>>>` inside code block:
 
 Double `>>>` inside code block:
 
-```
+```txt
 # Code
 >>>
 # Code
diff --git a/spec/fixtures/blockquote_fence_before.md b/spec/fixtures/blockquote_fence_before.md
index e6689b6c5dd0f0c807684b37152dc50c0b104486..d52eec7289625137d670a546128cb9084f4abfdd 100644
--- a/spec/fixtures/blockquote_fence_before.md
+++ b/spec/fixtures/blockquote_fence_before.md
@@ -8,7 +8,7 @@ Single `>>>` inside code block:
 
 Double `>>>` inside code block:
 
-```
+```txt
 # Code
 >>>
 # Code