函数 match-data 与 set-match-data 用于一次性读取或写入全部匹配数据。
该函数返回一个位置列表(标记或整数),记录最近一次搜索匹配文本的全部信息。第 0 个元素是整个表达式匹配的起始位置,第 1 个元素是结束位置;接下来两个元素是第一个子表达式的起始与结束位置,依此类推。一般来说:
第 2n
个元素对应 (match-beginning n)
第 2n+1
个元素对应 (match-end n)
通常所有元素均为标记或 nil;若 integers 非 nil,则使用整数而非标记。(此时缓冲区本身会作为额外元素追加到列表末尾,便于完整恢复匹配数据。)若最近一次匹配是使用 string-match 对字符串执行的,则始终使用整数,因为标记无法指向字符串内部。
若 reuse 非 nil,它应为一个列表。此时 match-data 会将匹配数据存入 reuse,即破坏性修改该列表。reuse 无需长度合适:过短则自动扩展,过长则保留长度并将多余元素设为 nil。该设计用于减少垃圾回收。
若 reseat 非 nil,reuse 列表中的所有标记会被重置为不指向任何位置。
与往常一样,在调用搜索函数与调用 match-data 获取其匹配数据之间,不能插入任何其他搜索操作。
(match-data)
⇒ (#<marker at 9 in foo>
#<marker at 17 in foo>
#<marker at 13 in foo>
#<marker at 17 in foo>)
该函数使用 match-list 中的元素设置匹配数据,match-list 应是之前调用 match-data 返回的列表。(更准确地说,任何格式相同的数据均可。)
若 match-list 指向不存在的缓冲区,不会报错,只是以无意义但无害的方式设置匹配数据。
若 reseat 非 nil,match-list 中的所有标记会被重置为不指向任何位置。
store-match-data 是 set-match-data 的半废弃别名。