正则表达式搜索

re-search-forward 函数用于搜索句子结尾,即由 sentence-end 正则表达式定义的模式。如果找到该模式(即找到句子结尾),re-search-forward 函数会完成两件事:

  1. re-search-forward 产生一个副作用:将光标移动到匹配内容的末尾。
  2. re-search-forward 返回真值。该值会被 if 接收,表示搜索成功。

光标移动这一副副作用会在 if 函数获取搜索成功的返回值之前完成。

if 函数从 re-search-forward 的成功调用中收到真值时,会执行 then 分支,即表达式 (skip-chars-backward " \t\n")。该表达式会反向跳过所有空格、制表符或回车符,直到找到可打印字符,并将光标停在该字符之后。由于光标已经移动到句子结尾模式的末尾,这一操作会将光标定位在句子最后一个可打印字符之后,通常是句号。

反之,如果 re-search-forward 函数未能找到表示句子结尾的模式,则返回假值。假值会使 if 执行第三个参数,即 (goto-char par-end):将光标移动到段落结尾。

(如果文本位于格式区域或等效位置,光标可能无法完全移动,此时 constrain-to-field 函数会发挥作用。)

正则表达式搜索非常实用,以 re-search-forward 为代表、将搜索作为 if 表达式判断条件的模式也十分便捷。你会经常看到或编写包含这种模式的代码。