* query-replace-regexp: Can't use \0 in TO-STRING @ 2017-05-06 0:48 zhanghj 2017-05-06 5:04 ` Tino Calancha 0 siblings, 1 reply; 11+ messages in thread From: zhanghj @ 2017-05-06 0:48 UTC (permalink / raw) To: emacs-devel The doc says: In TO-STRING, ‘\&’ or ‘\0’ stands for whatever matched the whole of REGEXP, and ‘\N’ (where N is a digit) stands for whatever matched the Nth ‘\(...\)’ (1-based) in REGEXP. The ‘\(...\)’ groups are counted from 1. But when using \0, emacs gives the following error message: match-substitute-replacement: Invalid use of ‘\’ in replacement text Using \& is OK. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 0:48 query-replace-regexp: Can't use \0 in TO-STRING zhanghj @ 2017-05-06 5:04 ` Tino Calancha 2017-05-06 8:09 ` Eli Zaretskii 2017-05-06 12:28 ` zhanghj 0 siblings, 2 replies; 11+ messages in thread From: Tino Calancha @ 2017-05-06 5:04 UTC (permalink / raw) To: zhanghj; +Cc: Tino Calancha, Emacs developers [-- Attachment #1: Type: text/plain, Size: 719 bytes --] On Sat, 6 May 2017, zhanghj wrote: > The doc says: > In TO-STRING, ‘\&’ or ‘\0’ stands for whatever matched the whole of > REGEXP, and ‘\N’ (where N is a digit) stands for whatever matched > the Nth ‘\(...\)’ (1-based) in REGEXP. The ‘\(...\)’ groups are > counted from 1. > > But when using \0, emacs gives the following error message: > match-substitute-replacement: Invalid use of ‘\’ in replacement text > > Using \& is OK. Thanks. The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 to fix Bug#23884. Apparently, \0 has never referred to the whole match in this command (\& it does), so we might want to skip \0 from this docstring and the manual. Regards, Tino ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 5:04 ` Tino Calancha @ 2017-05-06 8:09 ` Eli Zaretskii 2017-05-06 10:34 ` Tino Calancha 2017-05-07 3:48 ` zhanghj 2017-05-06 12:28 ` zhanghj 1 sibling, 2 replies; 11+ messages in thread From: Eli Zaretskii @ 2017-05-06 8:09 UTC (permalink / raw) To: Tino Calancha; +Cc: tino.calancha, emacs-devel, netjunegg > From: Tino Calancha <tino.calancha@gmail.com> > Date: Sat, 6 May 2017 14:04:46 +0900 (JST) > Cc: Tino Calancha <tino.calancha@gmail.com>, > Emacs developers <emacs-devel@gnu.org> > > The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 > to fix Bug#23884. > Apparently, \0 has never referred to the whole match in this command > (\& it does), so we might want to skip \0 from this docstring and the > manual. I fixed the doc string. the manual doesn't need fixing, AFAICT, as it already describes the behavior correctly. Thanks. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 8:09 ` Eli Zaretskii @ 2017-05-06 10:34 ` Tino Calancha 2017-05-07 3:48 ` zhanghj 1 sibling, 0 replies; 11+ messages in thread From: Tino Calancha @ 2017-05-06 10:34 UTC (permalink / raw) To: Eli Zaretskii; +Cc: netjunegg, emacs-devel, Tino Calancha On Sat, 6 May 2017, Eli Zaretskii wrote: >> From: Tino Calancha <tino.calancha@gmail.com> >> Date: Sat, 6 May 2017 14:04:46 +0900 (JST) >> Cc: Tino Calancha <tino.calancha@gmail.com>, >> Emacs developers <emacs-devel@gnu.org> >> >> The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 >> to fix Bug#23884. >> Apparently, \0 has never referred to the whole match in this command >> (\& it does), so we might want to skip \0 from this docstring and the >> manual. > > I fixed the doc string. the manual doesn't need fixing, AFAICT, as it > already describes the behavior correctly. Amen. Thanks. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 8:09 ` Eli Zaretskii 2017-05-06 10:34 ` Tino Calancha @ 2017-05-07 3:48 ` zhanghj 2017-05-19 8:13 ` Eli Zaretskii 1 sibling, 1 reply; 11+ messages in thread From: zhanghj @ 2017-05-07 3:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: netjune, emacs-devel, Tino Calancha Eli Zaretskii <eliz@gnu.org> writes: >> From: Tino Calancha <tino.calancha@gmail.com> >> Date: Sat, 6 May 2017 14:04:46 +0900 (JST) >> Cc: Tino Calancha <tino.calancha@gmail.com>, >> Emacs developers <emacs-devel@gnu.org> >> >> The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 >> to fix Bug#23884. >> Apparently, \0 has never referred to the whole match in this command >> (\& it does), so we might want to skip \0 from this docstring and the >> manual. > > I fixed the doc string. the manual doesn't need fixing, AFAICT, as it > already describes the behavior correctly. > > Thanks. Maybe also the doc string of query-replace-regexp-eval? ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-07 3:48 ` zhanghj @ 2017-05-19 8:13 ` Eli Zaretskii 0 siblings, 0 replies; 11+ messages in thread From: Eli Zaretskii @ 2017-05-19 8:13 UTC (permalink / raw) To: zhanghj; +Cc: netjune, emacs-devel, tino.calancha > From: zhanghj <netjunegg@gmail.com> > Cc: Tino Calancha <tino.calancha@gmail.com>, emacs-devel@gnu.org > CC: netjune@qq.com > Date: Sun, 07 May 2017 11:48:11 +0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > > I fixed the doc string. the manual doesn't need fixing, AFAICT, as it > > already describes the behavior correctly. > > > > Thanks. > > Maybe also the doc string of query-replace-regexp-eval? Done. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 5:04 ` Tino Calancha 2017-05-06 8:09 ` Eli Zaretskii @ 2017-05-06 12:28 ` zhanghj 2017-05-06 12:39 ` Tino Calancha 1 sibling, 1 reply; 11+ messages in thread From: zhanghj @ 2017-05-06 12:28 UTC (permalink / raw) To: Tino Calancha; +Cc: netjune, Emacs developers Tino Calancha <tino.calancha@gmail.com> writes: > The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 > to fix Bug#23884. > Apparently, \0 has never referred to the whole match in this command > (\& it does), so we might want to skip \0 from this docstring and the > manual. > > Regards, > Tino Why not \0? I think \0 is more intuitive and also used in vim. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 12:28 ` zhanghj @ 2017-05-06 12:39 ` Tino Calancha 2017-05-07 3:55 ` zhanghj 0 siblings, 1 reply; 11+ messages in thread From: Tino Calancha @ 2017-05-06 12:39 UTC (permalink / raw) To: zhanghj; +Cc: netjune, Emacs developers, Tino Calancha On Sat, 6 May 2017, zhanghj wrote: > Tino Calancha <tino.calancha@gmail.com> writes: > >> The docstring for `query-replace-regexp' was updated in commit 38f4b8ea615 >> to fix Bug#23884. >> Apparently, \0 has never referred to the whole match in this command >> (\& it does), so we might want to skip \0 from this docstring and the >> manual. >> >> Regards, >> Tino > Why not \0? I think \0 is more intuitive and also used in vim. I agree is more intuitive, and it works in `replace-match', or instance: (mapcar (lambda (group) (let ((str "foo123")) (when (string-match "[a-z]+\\([1-9]+\\)" str) (replace-match "bar" nil nil str group)))) (list 0 1)) => ("bar" "foobar") Are you willing to write a patch to implement it? ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-06 12:39 ` Tino Calancha @ 2017-05-07 3:55 ` zhanghj 2017-05-07 14:48 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: zhanghj @ 2017-05-07 3:55 UTC (permalink / raw) To: Tino Calancha; +Cc: netjune, Emacs developers Tino Calancha <tino.calancha@gmail.com> writes: >> Why not \0? I think \0 is more intuitive and also used in vim. > I agree is more intuitive, and it works in `replace-match', or instance: > (mapcar > (lambda (group) > (let ((str "foo123")) > (when (string-match "[a-z]+\\([1-9]+\\)" str) > (replace-match "bar" nil nil str group)))) > (list 0 1)) > => ("bar" "foobar") > > Are you willing to write a patch to implement it? The following patch works on my machine for regexp replacing. But I don't known if \0 should be supported in other places such as sort-regexp-fields, occur. diff --git a/lisp/subr.el b/lisp/subr.el index 02e7993..c182128 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3634,7 +3634,7 @@ match-string-no-properties (defun match-substitute-replacement (replacement &optional fixedcase literal string subexp) "Return REPLACEMENT as it will be inserted by `replace-match'. -In other words, all back-references in the form `\\&' and `\\N' +In other words, all back-references in the form `\\&', `\\0' and `\\N' are substituted with actual strings matched by the last search. Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same meaning as for `replace-match'." diff --git a/src/search.c b/src/search.c index 1223cbf..86255f0 100644 --- a/src/search.c +++ b/src/search.c @@ -2339,7 +2339,7 @@ in the replaced text, capitalize each word in NEWTEXT. If optional third arg LITERAL is non-nil, insert NEWTEXT literally. Otherwise treat `\\' as special: - `\\&' in NEWTEXT means substitute original matched text. + `\\&' or `\\0' in NEWTEXT means substitute original matched text. `\\N' means substitute what matched the Nth `\\(...\\)'. If Nth parens didn't match, substitute nothing. `\\\\' means insert one `\\'. @@ -2523,7 +2523,7 @@ since only regular expressions have distinguished subexpressions. */) { FETCH_STRING_CHAR_ADVANCE (c, newtext, pos, pos_byte); - if (c == '&') + if (c == '&' || c == '0') { substart = search_regs.start[sub]; subend = search_regs.end[sub]; @@ -2668,7 +2668,7 @@ since only regular expressions have distinguished subexpressions. */) MAKE_CHAR_MULTIBYTE (c); } - if (c == '&') + if (c == '&' || c == '0') idx = sub; else if (c >= '1' && c <= '9' && c - '0' < search_regs.num_regs) { ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-07 3:55 ` zhanghj @ 2017-05-07 14:48 ` Eli Zaretskii 2017-05-09 22:02 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2017-05-07 14:48 UTC (permalink / raw) To: zhanghj; +Cc: netjune, emacs-devel, tino.calancha > From: zhanghj <netjunegg@gmail.com> > Date: Sun, 07 May 2017 11:55:15 +0800 > Cc: netjune@qq.com, Emacs developers <emacs-devel@gnu.org> > > Tino Calancha <tino.calancha@gmail.com> writes: > > >> Why not \0? I think \0 is more intuitive and also used in vim. > > I agree is more intuitive, and it works in `replace-match', or instance: > > (mapcar > > (lambda (group) > > (let ((str "foo123")) > > (when (string-match "[a-z]+\\([1-9]+\\)" str) > > (replace-match "bar" nil nil str group)))) > > (list 0 1)) > > => ("bar" "foobar") > > > > Are you willing to write a patch to implement it? > > The following patch works on my machine for regexp replacing. But I > don't known if \0 should be supported in other places such as > sort-regexp-fields, occur. If this is accepted (and I'm not sure we should), then the user manual should also be updated, and NEWS should have an entry about the change. Thanks. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: query-replace-regexp: Can't use \0 in TO-STRING 2017-05-07 14:48 ` Eli Zaretskii @ 2017-05-09 22:02 ` Juri Linkov 0 siblings, 0 replies; 11+ messages in thread From: Juri Linkov @ 2017-05-09 22:02 UTC (permalink / raw) To: Eli Zaretskii; +Cc: netjune, emacs-devel, tino.calancha, zhanghj >> >> Why not \0? I think \0 is more intuitive and also used in vim. >> > I agree is more intuitive, and it works in `replace-match', or instance: >> > (mapcar >> > (lambda (group) >> > (let ((str "foo123")) >> > (when (string-match "[a-z]+\\([1-9]+\\)" str) >> > (replace-match "bar" nil nil str group)))) >> > (list 0 1)) >> > => ("bar" "foobar") >> > >> > Are you willing to write a patch to implement it? >> >> The following patch works on my machine for regexp replacing. But I >> don't known if \0 should be supported in other places such as >> sort-regexp-fields, occur. > > If this is accepted (and I'm not sure we should), then the user manual > should also be updated, and NEWS should have an entry about the > change. Some other regexp engines support the \0 format as well: http://www.regular-expressions.info/refreplacebackref.html What is important is to clearly differentiate the whole match from back references in the documentation (i.e. unlike back references \0 works only in replacements, not matches). ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-05-19 8:13 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-05-06 0:48 query-replace-regexp: Can't use \0 in TO-STRING zhanghj 2017-05-06 5:04 ` Tino Calancha 2017-05-06 8:09 ` Eli Zaretskii 2017-05-06 10:34 ` Tino Calancha 2017-05-07 3:48 ` zhanghj 2017-05-19 8:13 ` Eli Zaretskii 2017-05-06 12:28 ` zhanghj 2017-05-06 12:39 ` Tino Calancha 2017-05-07 3:55 ` zhanghj 2017-05-07 14:48 ` Eli Zaretskii 2017-05-09 22:02 ` Juri Linkov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).