From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Thorsten Jolitz Newsgroups: gmane.emacs.help Subject: Re: Possible to write 'beginning of line' in a String? Date: Wed, 03 Apr 2013 09:06:27 +0200 Message-ID: <87y5d0nle4.fsf@gmail.com> References: <877gkl1jgh.fsf@gmail.com> <515A93DE.9010306@easy-emacs.de> <87zjxhz3ts.fsf@gmail.com> <87k3olthcx.fsf@wanadoo.es> <515AA7B5.5010208@easy-emacs.de> <87k3okipwg.fsf@kuiper.lan.informatimago.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1364973380 28583 80.91.229.3 (3 Apr 2013 07:16:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 3 Apr 2013 07:16:20 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed Apr 03 09:16:48 2013 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UNHvz-0007lk-R0 for geh-help-gnu-emacs@m.gmane.org; Wed, 03 Apr 2013 09:16:39 +0200 Original-Received: from localhost ([::1]:45362 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNHvb-0003L6-3c for geh-help-gnu-emacs@m.gmane.org; Wed, 03 Apr 2013 03:16:15 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:34920) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNHvI-0003CA-DV for help-gnu-emacs@gnu.org; Wed, 03 Apr 2013 03:16:00 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UNHmR-0002Qx-Gc for help-gnu-emacs@gnu.org; Wed, 03 Apr 2013 03:06:51 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:51154) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNHmR-0002Pn-8w for help-gnu-emacs@gnu.org; Wed, 03 Apr 2013 03:06:47 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UNHmm-0001v1-KV for help-gnu-emacs@gnu.org; Wed, 03 Apr 2013 09:07:08 +0200 Original-Received: from g231233024.adsl.alicedsl.de ([92.231.233.24]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 03 Apr 2013 09:07:08 +0200 Original-Received: from tjolitz by g231233024.adsl.alicedsl.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 03 Apr 2013 09:07:08 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 69 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: g231233024.adsl.alicedsl.de User-Agent: Gnus/5.130002 (Ma Gnus v0.2) Emacs/24.2 (gnu/linux) Cancel-Lock: sha1:pnBHEJ0yCowdGs6OZcvkJzoJMzM= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:89919 Archived-At: "Pascal J. Bourguignon" 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