On Thu, Jun 21, 2007 at 10:11:16AM -0500, Mike Miller wrote:
> On Thu, 21 Jun 2007, John Hawley wrote:
>
> >A bit off topic, but a question about getting an emacs macro to find
> >alternative regexp's. Can't seem to get the right syntax.
> >Here's the macro. Should find and jump to either 'foo' or 'bar'.
> >
> >The macro displays a message about not finding '\(foo\|bar\)'.
> >I've tried myriad variations of the search string pattern with differing
> >quoting and escaping. :(
>
> I'm trying to learn this kind of thing too. So does it do what you want
> if you search for foo alone? In other words, is this all about getting
> the OR to work correctly? Is the grouping (parens) always needed?
>
> Mike
>
Yes, the below macro works with or without the parens.
;(defconst search_patterns "\\(foo\\|bar\\)")
(defconst search_patterns "foo\\|bar")
(defun search-for-patterns ()
"Search for alternative patterns."
(interactive)
(message "searching for %s" search_patterns)
(let ((cur (point)))
(re-search-forward search_patterns nil t)
(let ((pnt (point)))
(cond ((= cur pnt)
(message "no find %s" search_patterns))
(t
(goto-char pnt)
(message "found %s at char %s" search_patterns pnt)))
)))