Mercurial > emacs
changeset 20476:f213a5906ea6
(split-string): Handle empty matches reasonably.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 21 Dec 1997 01:35:50 +0000 |
parents | efbebc38e077 |
children | 6423efca2ea9 |
files | lisp/subr.el |
diffstat | 1 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/subr.el Sun Dec 21 01:34:37 1997 +0000 +++ b/lisp/subr.el Sun Dec 21 01:35:50 1997 +0000 @@ -983,12 +983,25 @@ Each match for SEPARATORS is a splitting point. The substrings between the splitting points are made into a list which is returned. -If SEPARATORS is absent, it defaults to \"[ \\f\\t\\n\\r\\v]+\"." +If SEPARATORS is absent, it defaults to \"[ \\f\\t\\n\\r\\v]+\". + +If there is match for SEPARATORS at the beginning of STRING, we do not +include a null substring for that. Likewise, if there is a match +at the end of STRING, we don't include a null substring for that." (let ((rexp (or separators "[ \f\t\n\r\v]+")) (start 0) + notfirst (list nil)) - (while (string-match rexp string start) + (while (and (string-match rexp string + (if (and notfirst + (= start (match-beginning 0)) + (< start (length string))) + (1+ start) start)) + (< (match-beginning 0) (length string))) + (setq notfirst t) (or (eq (match-beginning 0) 0) + (and (eq (match-beginning 0) (match-end 0)) + (eq (match-beginning 0) start)) (setq list (cons (substring string start (match-beginning 0)) list)))