diff --git a/ChangeLog b/ChangeLog
index 50dd3bfc886fa5225eb5904928d6ff6d0fe41bd4..37e2c1fbb3f91d6d05662b8d3bc2951c7f26eda8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-07-26  Benno Schulenberg  <bensberg@justemail.net>
+	* src/search.c (do_replace_loop): When doing regex replacements, find
+	 each zero-length match only once.  This fixes Savannah bug #45626.
+
 2015-07-25  Benno Schulenberg  <bensberg@justemail.net>
 	* src/global.c (shortcut_init, strtosc), src/files.c (savefile),
 	doc/man/nanorc.5, doc/texinfo/nano.texi: Add a new bindable function,
diff --git a/src/search.c b/src/search.c
index b2e0807940d8170c391e6b19c01e36ffa9643a32..6500bd5e0bccbe4cf434fdf3cb7ad0c5c97589e6 100644
--- a/src/search.c
+++ b/src/search.c
@@ -757,6 +757,12 @@ ssize_t do_replace_loop(
 #endif
 	    }
 
+#ifdef HAVE_REGEX_H
+	    /* Don't find the same zero-length match again. */
+	    if (match_len == 0)
+		match_len++;
+#endif
+
 	    /* Set the cursor at the last character of the replacement
 	     * text, so searching will resume after the replacement
 	     * text.  Note that current_x might be set to (size_t)-1