all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* 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

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.