unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Possible to write 'beginning of line' in a String?
@ 2013-04-02  7:26 Thorsten Jolitz
  2013-04-02  8:11 ` Teemu Likonen
  2013-04-02  8:16 ` Andreas Röhler
  0 siblings, 2 replies; 10+ messages in thread
From: Thorsten Jolitz @ 2013-04-02  7:26 UTC (permalink / raw)
  To: help-gnu-emacs


Hi List, 

what is the (or rather - is there a) string equivalent to regexp "^abc"?
"\nabc" is not quite what I want.

-- 
cheers,
Thorsten





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  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
  1 sibling, 1 reply; 10+ messages in thread
From: Teemu Likonen @ 2013-04-02  8:11 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 261 bytes --]

Thorsten Jolitz [2013-04-02 09:26:54 +0200] wrote:

> what is the (or rather - is there a) string equivalent to regexp
> "^abc"? "\nabc" is not quite what I want.

I think "^" should work but there is also "\`". Actually, in Lisp
strings you would write "\\`".

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  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  8:16 ` Andreas Röhler
  2013-04-02  9:20   ` Thorsten Jolitz
  1 sibling, 1 reply; 10+ messages in thread
From: Andreas Röhler @ 2013-04-02  8:16 UTC (permalink / raw)
  To: help-gnu-emacs

Am 02.04.2013 09:26, schrieb Thorsten Jolitz:
>
> Hi List,
>
> what is the (or rather - is there a) string equivalent to regexp "^abc"?
> "\nabc" is not quite what I want.
>

You may express "Beginning of line followed by string 'abc'" in different ways.
Depends from usage, your needs.

rx macro delivers that wording of regexps

Maybe tell what's inconvenient with "^abc"





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  2013-04-02  8:16 ` Andreas Röhler
@ 2013-04-02  9:20   ` Thorsten Jolitz
  2013-04-02  9:24     ` Óscar Fuentes
  0 siblings, 1 reply; 10+ messages in thread
From: Thorsten Jolitz @ 2013-04-02  9:20 UTC (permalink / raw)
  To: help-gnu-emacs

Andreas Röhler <andreas.roehler@easy-emacs.de> writes:

> Am 02.04.2013 09:26, schrieb Thorsten Jolitz:
>>
>> Hi List,
>>
>> what is the (or rather - is there a) string equivalent to regexp "^abc"?
>> "\nabc" is not quite what I want.
>>
>
> You may express "Beginning of line followed by string 'abc'" in
> different ways. Depends from usage, your needs.
>
> rx macro delivers that wording of regexps
>
> Maybe tell what's inconvenient with "^abc"

I would need something that can be inserted as string, but is matched
only at beginning of line. 

,-----------------
| (insert "^abc ")
| ^abc
`-----------------

is not what I want, and "abc ", when used as regexp, is obviously
matched anywhere. 

-- 
cheers,
Thorsten




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  2013-04-02  8:11 ` Teemu Likonen
@ 2013-04-02  9:22   ` Thorsten Jolitz
  0 siblings, 0 replies; 10+ messages in thread
From: Thorsten Jolitz @ 2013-04-02  9:22 UTC (permalink / raw)
  To: help-gnu-emacs

Teemu Likonen <tlikonen@iki.fi> writes:

> Thorsten Jolitz [2013-04-02 09:26:54 +0200] wrote:
>
>> what is the (or rather - is there a) string equivalent to regexp
>> "^abc"? "\nabc" is not quite what I want.
>
> I think "^" should work but there is also "\`". Actually, in Lisp
> strings you would write "\\`".

But this is still regexp syntax, when used as a string "^" and "\`" are
just printed like other chars. 

-- 
cheers,
Thorsten




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  2013-04-02  9:20   ` Thorsten Jolitz
@ 2013-04-02  9:24     ` Óscar Fuentes
  2013-04-02  9:41       ` Andreas Röhler
  0 siblings, 1 reply; 10+ messages in thread
From: Óscar Fuentes @ 2013-04-02  9:24 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: help-gnu-emacs

Thorsten Jolitz <tjolitz@gmail.com> writes:

> I would need something that can be inserted as string, but is matched
> only at beginning of line. 
>
> ,-----------------
> | (insert "^abc ")
> | ^abc
> `-----------------
>
> is not what I want, and "abc ", when used as regexp, is obviously
> matched anywhere. 

what about

(beginning-of-line)
(insert "abc")




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  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>
  0 siblings, 2 replies; 10+ messages in thread
From: Andreas Röhler @ 2013-04-02  9:41 UTC (permalink / raw)
  To: help-gnu-emacs

Am 02.04.2013 11:24, schrieb Óscar Fuentes:
> (beginning-of-line)
> (insert "abc")

resp.

(progn (beginning-of-line)
        (looking-at "abc")



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  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>
  1 sibling, 0 replies; 10+ messages in thread
From: Thorsten Jolitz @ 2013-04-02  9:58 UTC (permalink / raw)
  To: help-gnu-emacs

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. 

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'.

-- 
cheers,
Thorsten




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
       [not found]         ` <mailman.23288.1364897437.855.help-gnu-emacs@gnu.org>
@ 2013-04-02 21:27           ` Pascal J. Bourguignon
  2013-04-03  7:06             ` Thorsten Jolitz
  0 siblings, 1 reply; 10+ messages in thread
From: Pascal J. Bourguignon @ 2013-04-02 21:27 UTC (permalink / raw)
  To: help-gnu-emacs

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 {}.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Possible to write 'beginning of line' in a String?
  2013-04-02 21:27           ` Pascal J. Bourguignon
@ 2013-04-03  7:06             ` Thorsten Jolitz
  0 siblings, 0 replies; 10+ messages in thread
From: Thorsten Jolitz @ 2013-04-03  7:06 UTC (permalink / raw)
  To: help-gnu-emacs

"Pascal J. Bourguignon" <pjb@informatimago.com> writes:

>> 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

Actually I kind of overlooked "\\`" until now and always used "^", but
in this special case my question refers to it would not make a
difference. 

>> 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.

I simply refered to the common use of the term 'ASCII control
characters', but thanks for the insights about what is going on under
the hood in Emacs.

-- 
cheers,
Thorsten




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-04-03  7:06 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2013-04-03  7:06             ` Thorsten Jolitz

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).