33.3 比较文本

此函数可让你直接比较缓冲区中文本的片段,无需先将其复制为字符串。

Function: compare-buffer-substrings buffer1 start1 end1 buffer2 start2 end2

此函数可比较同一缓冲区或两个不同缓冲区中的两个子串。 前三个参数指定一个子串,给出一个缓冲区(或缓冲区名)及其内的两个位置。 后三个参数以相同方式指定另一个子串。 你可以对 buffer1buffer2 或两者使用 nil,表示当前缓冲区。

若第一个子串更小,返回值为负数;若更大则为正数;相等则为零。 结果的绝对值为子串内首个不同字符的索引加一。

case-fold-searchnil,此函数在比较字符时忽略大小写。 它始终忽略文本属性。

假设当前缓冲区中包含文本 ‘foobarbar haha!rara!,则在本例中两个子串分别为 ‘rbar ’ 与 ‘rara!’。 返回值为 2,因为第一个子串在第二个字符处更大。

(compare-buffer-substrings nil 6 11 nil 16 21)
     ⇒ 2