all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Possible to write 'beginning of line' in a String?
Date: Tue, 02 Apr 2013 23:27:59 +0200	[thread overview]
Message-ID: <87k3okipwg.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: mailman.23288.1364897437.855.help-gnu-emacs@gnu.org

Thorsten Jolitz <tjolitz@gmail.com> writes:

> Andreas Röhler <andreas.roehler@easy-emacs.de> writes:
>
>> Am 02.04.2013 11:24, schrieb Óscar Fuentes:
>>> (beginning-of-line)
>>> (insert "abc")
>>
>> resp.
>>
>> (progn (beginning-of-line)
>>        (looking-at "abc")
>
>
> Thats not what I mean. I set a variable with string values that are
> inserted by other libraries (not under my control), but I want to use
> these string values for regexp searches in my own program too. 

No.

Regular expressions are different from the string they match in
general.  

Literal regular expressions are of course identical to the string they
match. (string-match "abc" "abc") --> 0 ; is true

Some special cases may also be identical.  For example, "[][*]*" matches
itself.  (string-match "[][*]*" "[][*]*") --> 0

But not in general, and not in the case of matching the beginning of the
line, since this matches 0 characters, but a position, while obviously
the regular expression for it is 1 or more characters.

One easy solution is to duplicate your variables:

    (defvar *thingy-string* "hello")
    (defvar *thingy-regexp* "\\`hello")


Another solution would be to write a function that would generate from a
regular expression a minimal string that would match.  But in general,
that would be you'd have to re-implement the full regexp parser, since
AFAIK, emacs doesn't have a public API to map regexp strings to regexp
sexps that can easily be processed.


Notice the difference between ^ which means beginning of string, and \\`
which means beginning of line:

    (string-match "^hello" "hello") --> 0
    (string-match "\\`hello" "hello") --> 0

    (string-match "^world" "hello\nworld") --> 6
    (string-match "\\`world" "hello\nworld") --> nil



> But thanks to everyone, I was probably looking for an (obscure magic)
> non-printable control-character that functions in a string like "^" does
> in a regexp, but the way to handle this is probably 'take the string and
> add "^" in front of it before using it as regexp'.

There's no such thing as a control-character.  There are characters.
And there are encodings, which map characters to codes.  Then in a given
encoding, there may be codes that don't correspond to any characters
that may be used to "control" or some other purpose, that one could call
control codes.

Don't let emacs confuse you by the fact that it uses integers to
represent characters.  It still decode and encode them to sequences of
code when doing I/O.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.


  parent reply	other threads:[~2013-04-02 21:27 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-02  7:26 Possible to write 'beginning of line' in a String? Thorsten Jolitz
2013-04-02  8:11 ` Teemu Likonen
2013-04-02  9:22   ` Thorsten Jolitz
2013-04-02  8:16 ` Andreas Röhler
2013-04-02  9:20   ` Thorsten Jolitz
2013-04-02  9:24     ` Óscar Fuentes
2013-04-02  9:41       ` Andreas Röhler
2013-04-02  9:58         ` Thorsten Jolitz
     [not found]         ` <mailman.23288.1364897437.855.help-gnu-emacs@gnu.org>
2013-04-02 21:27           ` Pascal J. Bourguignon [this message]
2013-04-03  7:06             ` Thorsten Jolitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k3okipwg.fsf@kuiper.lan.informatimago.com \
    --to=pjb@informatimago.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.