* end-of-line $ in multiline regexp replace
@ 2003-10-31 0:22 Leo
2003-10-31 8:04 ` Alan Mackenzie
2003-10-31 16:50 ` Edward Dodge
0 siblings, 2 replies; 3+ messages in thread
From: Leo @ 2003-10-31 0:22 UTC (permalink / raw)
hi there
want to replace a multiline regexp by an one-line replacement. (in fact i
just want to delete the line with the regexp.)
so, at first i tried:
(query-replace-regexp ".*bytes.*$[ctrl-q][ctrl-j]" "" nil nil nil)
which did not find any line. :-(
then i just tried the same without the end-of-line "$":
(query-replace-regexp ".*bytes.*[ctrl-q][ctrl-j]" "" nil nil nil)
and that worked.
i don't understand, why? the first regexp ".*bytes.*$[ctrl-q][ctrl-j]" seems
to me even >>more valid<< then the second one.
any explanations?
tanks and cheers, leo
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: end-of-line $ in multiline regexp replace
2003-10-31 0:22 end-of-line $ in multiline regexp replace Leo
@ 2003-10-31 8:04 ` Alan Mackenzie
2003-10-31 16:50 ` Edward Dodge
1 sibling, 0 replies; 3+ messages in thread
From: Alan Mackenzie @ 2003-10-31 8:04 UTC (permalink / raw)
Leo <leo.broska@nospam.isys.com.au> wrote on Fri, 31 Oct 2003 11:22:25 +1100:
> hi there
> want to replace a multiline regexp by an one-line replacement. (in fact i
> just want to delete the line with the regexp.)
> so, at first i tried:
> (query-replace-regexp ".*bytes.*$[ctrl-q][ctrl-j]" "" nil nil nil)
> which did not find any line. :-(
> then i just tried the same without the end-of-line "$":
> (query-replace-regexp ".*bytes.*[ctrl-q][ctrl-j]" "" nil nil nil)
> and that worked.
> i don't understand, why? the first regexp ".*bytes.*$[ctrl-q][ctrl-j]" seems
> to me even >>more valid<< then the second one.
> any explanations?
Yes. It's on the page "Regexp Special" in the Elisp manual:
: For historical compatibility reasons, `$' can be used only at the
: end of the regular expression, or before `\)' or `\|'.
I think this is crazy, but there you go. There is no matching warning on
the corresponding page ("Regexps") in the Emacs manual (at least, there
wasn't in October 2001), which seems like a bug to me.
A workaround is to enclose such a `$' in parentheses: "\($\)" [or
"\\($\\)" if you're writing it as a string in a Lisp program].
> tanks and cheers, leo
--
Alan Mackenzie (Munich, Germany)
Email: aacm@muuc.dee; to decode, wherever there is a repeated letter
(like "aa"), remove half of them (leaving, say, "a").
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: end-of-line $ in multiline regexp replace
2003-10-31 0:22 end-of-line $ in multiline regexp replace Leo
2003-10-31 8:04 ` Alan Mackenzie
@ 2003-10-31 16:50 ` Edward Dodge
1 sibling, 0 replies; 3+ messages in thread
From: Edward Dodge @ 2003-10-31 16:50 UTC (permalink / raw)
"Leo" <leo.broska@NOSPAM.isys.com.au> writes:
> hi there
>
> want to replace a multiline regexp by an one-line replacement. (in fact i
> just want to delete the line with the regexp.)
>
> so, at first i tried:
> (query-replace-regexp ".*bytes.*$[ctrl-q][ctrl-j]" "" nil nil nil)
> which did not find any line. :-(
>
> then i just tried the same without the end-of-line "$":
> (query-replace-regexp ".*bytes.*[ctrl-q][ctrl-j]" "" nil nil nil)
> and that worked.
>
> i don't understand, why? the first regexp ".*bytes.*$[ctrl-q][ctrl-j]" seems
> to me even >>more valid<< then the second one.
>
> any explanations?
>
> tanks and cheers, leo
The $ meta-character represents the very end of a line, which would
include the newline character. Whereas C-q C-j is a regular
expression for the newline character. My guess is that $ marks the
very end of the line (INCLUDING the newline character) and so your
regexp is actually the equivalent of this:
".*bytes.*[ctrl-q][ctrl-j][ctrl-q][ctrl-j]"
--
Edward Dodge
/GNU Emacs 21.3.50.1 (powerpc-apple-darwin5.5) of 2002-10-11 on G3/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-10-31 16:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-31 0:22 end-of-line $ in multiline regexp replace Leo
2003-10-31 8:04 ` Alan Mackenzie
2003-10-31 16:50 ` Edward Dodge
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).