Go to the first, previous, next, last section, table of contents.

マッチデータ

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)
        )))


Go to the first, previous, next, last section, table of contents.