From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Pascal J. Bourguignon" Newsgroups: gmane.emacs.help Subject: Re: Possible to write 'beginning of line' in a String? Date: Tue, 02 Apr 2013 23:27:59 +0200 Organization: Informatimago Message-ID: <87k3okipwg.fsf@kuiper.lan.informatimago.com> References: <877gkl1jgh.fsf@gmail.com> <515A93DE.9010306@easy-emacs.de> <87zjxhz3ts.fsf@gmail.com> <87k3olthcx.fsf@wanadoo.es> <515AA7B5.5010208@easy-emacs.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1364941941 26071 80.91.229.3 (2 Apr 2013 22:32:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 2 Apr 2013 22:32:21 +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 00:32:49 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 1UN9l2-0006dn-KZ for geh-help-gnu-emacs@m.gmane.org; Wed, 03 Apr 2013 00:32:48 +0200 Original-Received: from localhost ([::1]:44185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UN9kd-0007lo-UC for geh-help-gnu-emacs@m.gmane.org; Tue, 02 Apr 2013 18:32:23 -0400 Original-Path: usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 75 Original-X-Trace: individual.net AlwjbpT0gONint7R6QT8kgJtB7HbBdQ4rXrVzkJyBtFXTeNwB6 Cancel-Lock: sha1:MDI1MDA3YWEzZDQzNWE3ODJiZmNkZGIwMzgzMTA3YTUwNDc5M2YzNQ== sha1:mJ9ZpOM+oVCTr0k5WogkeVtLF74= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux) Original-Xref: usenet.stanford.edu gnu.emacs.help:197644 X-Mailman-Approved-At: Tue, 02 Apr 2013 18:32:11 -0400 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:89914 Archived-At: Thorsten Jolitz writes: > Andreas Röhler 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 {}.