34.1 Searching for Strings
These are the primitive functions for searching through the text in a buffer. They are meant for use in programs, but you may call them interactively. If you do so, they prompt for the search string; the arguments limit
and noerror
are nil
, and repeat
is 1. For more details on interactive searching, see Searching and Replacement in The GNU Emacs Manual.
These search functions convert the search string to multibyte if the buffer is multibyte; they convert the search string to unibyte if the buffer is unibyte. See Text Representations.
command
search-forward string \&optional limit noerror countβ
This function searches forward from point for an exact match for string
. If successful, it sets point to the end of the occurrence found, and returns the new value of point. If no match is found, the value and side effects depend on noerror
(see below).
In the following example, point is initially at the beginning of the line. Then (search-forward "fox")
moves point after the last letter of βfox
β:
---------- Buffer: foo ----------
βThe quick brown fox jumped over the lazy dog.
---------- Buffer: foo ----------
(search-forward "fox")
β 20
---------- Buffer: foo ----------
The quick brown foxβ jumped over the lazy dog.
---------- Buffer: foo ----------
The argument limit
specifies the bound to the search, and should be a position in the current buffer. No match extending after that position is accepted. If limit
is omitted or nil
, it defaults to the end of the accessible portion of the buffer.
What happens when the search fails depends on the value of noerror
. If noerror
is nil
, a search-failed
error is signaled. If noerror
is t
, search-forward
returns nil
and does nothing. If noerror
is neither nil
nor t
, then search-forward
moves point to the upper bound and returns nil
.
The argument noerror
only affects valid searches which fail to find a match. Invalid arguments cause errors regardless of noerror
.
If count
is a positive number n
, the search is done n
times; each successive search starts at the end of the previous match. If all these successive searches succeed, the function call succeeds, moving point and returning its new value. Otherwise the function call fails, with results depending on the value of noerror
, as described above. If count
is a negative number -n
, the search is done n
times in the opposite (backward) direction.
command
search-backward string \&optional limit noerror countβ
This function searches backward from point for string
. It is like search-forward
, except that it searches backwards rather than forwards. Backward searches leave point at the beginning of the match.
command
word-search-forward string \&optional limit noerror countβ
This function searches forward from point for a word match for string
. If it finds a match, it sets point to the end of the match found, and returns the new value of point.
Word matching regards string
as a sequence of words, disregarding punctuation that separates them. It searches the buffer for the same sequence of words. Each word must be distinct in the buffer (searching for the word βball
β does not match the word βballs
β), but the details of punctuation and spacing are ignored (searching for βball boy
β does match βball. Boy!
β).
In this example, point is initially at the beginning of the buffer; the search leaves it between the βy
β and the β!
β.
---------- Buffer: foo ----------
βHe said "Please! Find
the ball boy!"
---------- Buffer: foo ----------
(word-search-forward "Please find the ball, boy.")
β 39
---------- Buffer: foo ----------
He said "Please! Find
the ball boyβ!"
---------- Buffer: foo ----------
If limit
is non-nil
, it must be a position in the current buffer; it specifies the upper bound to the search. The match found must not extend after that position.
If noerror
is nil
, then word-search-forward
signals an error if the search fails. If noerror
is t
, then it returns nil
instead of signaling an error. If noerror
is neither nil
nor t
, it moves point to limit
(or the end of the accessible portion of the buffer) and returns nil
.
If count
is a positive number, it specifies how many successive occurrences to search for. Point is positioned at the end of the last match. If count
is a negative number, the search is backward and point is positioned at the beginning of the last match.
Internally, word-search-forward
and related functions use the function word-search-regexp
to convert string
to a regular expression that ignores punctuation.
command
word-search-forward-lax string \&optional limit noerror countβ
This command is identical to word-search-forward
, except that the beginning or the end of string
need not match a word boundary, unless string
begins or ends in whitespace. For instance, searching for βball boy
β matches βball boyee
β, but does not match βballs boy
β.
command
word-search-backward string \&optional limit noerror countβ
This function searches backward from point for a word match to string
. This function is just like word-search-forward
except that it searches backward and normally leaves point at the beginning of the match.
command
word-search-backward-lax string \&optional limit noerror countβ
This command is identical to word-search-backward
, except that the beginning or the end of string
need not match a word boundary, unless string
begins or ends in whitespace.