So I set up a tumblr post document as:
title:
body:
So get the title I use (string-match "\\title: \(.*\)\$"), which is fine
because it's on a single line. But with I'm having trouble getting the body
because it's multiple lines. So is there someway I can get any text
following the body:_space_? I was thinking also of saving the entire buffer
and then subtracting the title: TITLE and body:_space_ but I still don't
know about that.
Thanks for your help.
--
View this message in context: http://www.nabble.com/Regex-Problem-tp18547090p18547090.html
Sent from the Emacs - Help mailing list archive at Nabble.com.
to get text out of the “body:”, you can do something like this:
(goto-char 1)
(search-forward "body:")
(setq mytext (buffer-substring-no-properties (point) (1+ (buffer-
size))))
for some basic elisp functions, see
http://xahlee.org/emacs/elisp_common_functions.html
Xah
∑ http://xahlee.org/
☄
> (setq mytext (buffer-substring-no-properties (point) (1+ (buffer-
> size))))
Just a nitpick: in general you want to use `point-max' rather than
(1+ (buffer-size)) to take into account any narrowing.
In an emacs regexp, you can directly enter a newline character as a
possible match by hitting C-j (will appear as ^J in the regexp) and/or
C-q C-m (honestly, I'm not exactly sure what the difference between ^J
and ^M is. I think one is \n while the other is \r. Since Windows
requires all lines to end with \r\n, I would allow for either ^J or ^M
in the search).
Also, \' means "end of buffer/string", so using both that knowledge, I
think the following will work...
"^body: ?\(\(.\|^J\|^M\)*\)\'" (there is a \' at the end of that
string)
Also, I am not certain if I understand why your regexp for title had \
\ at the beginning? wouldn't that match a literal backslash when you
really want just the beginning of the line (^)?
let me know if something I said didn't make sense.
-Thr4wn
> In an emacs regexp, you can directly enter a newline character as a
> possible match by hitting C-j (will appear as ^J in the regexp) and/or
> C-q C-m
You can, but you should most definitely not. It just makes the text
hard to read or edit in anything other than Emacs. Just use \n.
> Since Windows requires all lines to end with \r\n, I would allow for
> either ^J or ^M in the search).
I believe Emacs buffers will only contain \n even for Windows files.
> On Jul 19, 1:50 pm, travis jeffery <eatsleepg...@gmail.com> wrote:
>> So I set up a tumblr post document as:
>> title:
>> body:
>>
>> So get the title I use (string-match "\\title: \(.*\)\$"), which is fine
What do you mean by document? A file or a buffer? If so, why do you
use string-match? You can just search around in the buffer, which
should be more efficient.
regards,
Nikolaj Schumacher
That's a good point, I didn't think about that.
However, whenever I try to use \n in my regex searches, emacs does not
seem to recognize that as a newline. the regexp syntax documentation
also does not seem to mention any way to refer to a newline.
Am I just missing something?
-Thr4wn
Interactively (e.g. C-M-s), you must use an actual newline character (via C-q
j), not \n.
> Interactively (e.g. C-M-s), you must use an actual newline character (via C-q
> j), not \n.
C-q C-j
Oops, thanks; that's what I meant.
> However, whenever I try to use \n in my regex searches, emacs does not
> seem to recognize that as a newline. the regexp syntax documentation
> also does not seem to mention any way to refer to a newline.
> Am I just missing something?
You're not. \n is in fact not part of the regexp syntax. It's part
of the lisp string syntax. It's the same reason you need to use only
one \ interactively, but two in lisp.
By the way, if you are designing regular expressions, it's usually
easier to use `re-builder' than interactive search.
regards,
Nikolaj Schumacher