changeset 28065:093dcd5f39b2

(replace-regexps-in-string): Properly handle the case where we match an empty string.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 08 Mar 2000 23:49:09 +0000
parents 34cb92c8c3e4
children 95a07dc453f4
files lisp/subr.el
diffstat 1 files changed, 16 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Wed Mar 08 23:46:09 2000 +0000
+++ b/lisp/subr.el	Wed Mar 08 23:49:09 2000 +0000
@@ -1229,23 +1229,22 @@
       (while (and (< start l) (string-match regexp string start))
 	(setq mb (match-beginning 0)
 	      me (match-end 0))
-	(if (= me mb)
-	    (setq start l		; Matched empty string -- bail out.
-		  matches (list string))
-	  ;; Generate a replacement for the matched substring.
-	  ;; Operate only on the substring to minimize string consing.
-	  ;; Set up match data for the substring for replacement;
-	  ;; presumably this is likely to be faster than munging the
-	  ;; match data directly in Lisp.
-	  (string-match regexp (setq str (substring string mb me)))
-	  (setq matches
-		(cons (replace-match (if (stringp rep)
-					 rep
-				       (funcall rep (match-string 0 str)))
-				     fixedcase literal str subexp)
-		      (cons (substring string start mb) ; unmatched prefix
-			    matches)))
-	  (setq start me)))
+	;; If we matched the empty string, make sure we advance by one char
+	(when (= me mb) (setq me (min l (1+ mb))))
+	;; Generate a replacement for the matched substring.
+	;; Operate only on the substring to minimize string consing.
+	;; Set up match data for the substring for replacement;
+	;; presumably this is likely to be faster than munging the
+	;; match data directly in Lisp.
+	(string-match regexp (setq str (substring string mb me)))
+	(setq matches
+	      (cons (replace-match (if (stringp rep)
+				       rep
+				     (funcall rep (match-string 0 str)))
+				   fixedcase literal str subexp)
+		    (cons (substring string start mb) ; unmatched prefix
+			  matches)))
+	(setq start me))
       ;; Reconstruct a string from the pieces.
       (setq matches (cons (substring string start l) matches)) ; leftover
       (apply #'concat (nreverse matches)))))