Function: match-beginning count
この関数は、 (最後の)正規表現サーチでマッチしたテキストの頭のポジションを 返します。数値 count は、どの subexpression の(頭の)ポジションを返すかを示 します。 count が 0 の場合、regexp (全体に)マッチしたテキストのポジション を返します。
以下の例において、ポイントは行の先頭に置かれています。サーチフォームを評価 した後、ポイントは行のスペースと word の in との間に置かれます。マッチ(全 体)の頭はバッファの 9番目の文字 (T) であり、最初の subexpression にマッチ するものの頭は 13 番目の文字 (c) です。
match-beginning は、(必要なマッチを行なった後)別のサーチを行なう前に呼ばな くてはいけません。 Emacs には非同期プロセスが存在するため、そのサーチとは 別のコマンドから呼ばれた場合、match-beginning は正しい結果を与えないことが ありえます (しかしフィルターや他の非同期プロセスは、この情報のセーブ/リス
トアを行なうべきである!!)。
(list (re-search-forward "The \\(cat \\)") (match-beginning 0) (match-beginning 1)) => (t 9 13)
---------- Buffer: foo ---------- I read "The cat in the hat comes back" twice. ---------- Buffer: foo ----------
次の例は、match-beginning を呼ぶ誤った方法です。 display-time を同時に走ら せており、これはその処理の一部としてサーチを行なうため、この例は誤った結果 を与えます。(訳注:??)
(re-search-forward "The \\(cat \\)") => t (match-beginning 0) => 4
Function: match-end count
この関数は、 (最後の)正規表現サーチでマッチしたテキストの最後のポジション を返します。この関数は match-beginning と対応しています。
Function: match-data
この関数は、 (最後の)サーチがマッチしたものに関する(全ての)情報を含むリス トを新しく返します。最初の要素(要素 0) は、最初の subexpression にマッチし たものの頭です。2番目の要素(要素 1) は (その) subexpression にマッチしたも のの終りです。 2N 番目の要素(訳注:要素 2N では??)は (match-beginning N) で、要素 2N+1 は (match-end N) です。結果は(全て)マーカーか (マッチしない 場合) nil で表わされます。他のサーチコマンドにおけるように、サーチの呼び出
しと match-data の呼び出しとの間に別のサーチが入り込むようなことがあっては いけません。
(progn (re-search-forward "The \\(cat \\)") (match-data)) => (#<marker at 9 in foo> #<marker at 17 in foo> #<marker at 13 in foo> #<marker at 17 in foo>
Function: store-match-data match-list
この関数は、 "(最後の)サーチでマッチしたもの(訳注:last search match)" に 関する内部データ構造を match-list の要素に設定します。 match-list は(前に) match-data で作られてなくてはいけません。
次の例は、この 2つの関数の標準的な使用法(訳注:canonical use)を示していま す。
(let ((data (match-data))) (unwind-protect ...; もとのマッチデータを変えてしまうかもしれない。 (store-match-data data)))
非同期プロセス関数 (フィルターと sentinels) や、 recursive-edit を用いる モードは(全て)、サーチを行なったりユーザーにサーチを行なわせることで match-data を変更する可能性が存在する場合、 match-data のセーブ/リストアを 行なわなくてはいけません。対応するバッファがまだ存在している場合 match- data をリストアする関数を以下に示します。
(defun restore-match-data (data) "restore the match data FATA unless the buffer is missing." (catch 'foo (let ((d data)) (while d (and (car d) (nill (marker-buffer (car d)))
;; match-data バッファは削除された (throw 'foo nil)) (setq d (cdr d))) (store-match-data data) )))