Mercurial > emacs
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)))))