関数match-dataとset-match-dataは、マッチデータ全体にたいして一度に読み取り、または書き込みを行います。
この関数は最後の検索によりマッチしたテキストのすべての情報を記録する位置(マーカーか整数)をリターンする。要素0は正規表現全体にたいするマッチの先頭の位置。要素1はその正規表現にたいするマッチの終端の位置。次の2つの要素は1つ目の部分式にたいするマッチの先頭と終了、...となる。一般的に要素番号
2n
は(match-beginning n)、要素番号
2n + 1
は(match-end n)に対応する。
すべての要素は通常はマーカーかnilだが、もしintegersが非nilならマーカーのかわりに整数を使用することを意味する(この場合にはマッチデータの完全なリストアを容易にするために、リストの最後の要素としてバッファー自身が追加される)。最後の検索がstring-matchにより文字列にたいして行われた場合には、マーカーは文字列の内部をポイントできないので常に整数が使用される。
reuseが非nilなら、それはリストであること。この場合には、match-dataはマッチデータをreuse内に格納する。つまりreuseは破壊的に変更される。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の半ば時代遅れなエイリアス。