20.4 Regular Expression Search
A regular expression (regexp, for short) is a pattern
that denotes a class of alternative strings to match, possibly
infinitely many. GNU Emacs provides both incremental and
nonincremental ways to search for a match for a regexp. The syntax of
regular expressions is explained in the following section.
Incremental search for a regexp is done by typing C-M-s
(isearch-forward-regexp
), by invoking C-s with a
prefix argument (whose value does not matter), or by typing M-r
within a forward incremental search. This command reads a
search string incrementally just like C-s, but it treats the
search string as a regexp rather than looking for an exact match
against the text in the buffer. Each time you add text to the search
string, you make the regexp longer, and the new regexp is searched
for. To search backward for a regexp, use C-M-r
(isearch-backward-regexp
), C-r with a prefix argument,
or M-r within a backward incremental search.
All of the control characters that do special things within an
ordinary incremental search have the same function in incremental regexp
search. Typing C-s or C-r immediately after starting the
search retrieves the last incremental search regexp used; that is to
say, incremental regexp and non-regexp searches have independent
defaults. They also have separate search rings that you can access with
M-p and M-n.
If you type <SPC> in incremental regexp search, it matches any
sequence of whitespace characters, including newlines. If you want to
match just a space, type C-q <SPC>. You can control what a
bare spece matches by setting the variable
search-whitespace-regexp
to the desired regexp.
Note that adding characters to the regexp in an incremental regexp
search can make the cursor move back and start again. For example, if
you have searched for ‘foo’ and you add ‘\|bar’, the cursor
backs up in case the first ‘bar’ precedes the first ‘foo’.
Nonincremental search for a regexp is done by the functions
re-search-forward
and re-search-backward
. You can invoke
these with M-x, or bind them to keys, or invoke them by way of
incremental regexp search with C-M-s <RET> and C-M-r
<RET>.
If you use the incremental regexp search commands with a prefix
argument, they perform ordinary string search, like
isearch-forward
and isearch-backward
. See Incremental Search.