※ ChatGPTを利用し、要約された質問です(原文:Emacs Lispの検索とキャプチャが変?)
Emacs Lispの検索とキャプチャが変?
このQ&Aのポイント
Emacs Lispの検索方法とキャプチャの動作について質問です。
re-search-forwardとre-search-backwardを使用した際、キャプチャが正しく動作しない現象が発生します。
Emacs 23.4.1を使用している場合に限り、re-search-forwardのキャプチャが異なる結果を返す問題が発生しています。
お世話になります。
以下のようなスクラッチバッファでelispの検索の実験をしています。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
; -*- lisp-interaction -*-
(re-search-forward "\\([a-z]+\\)\\([0-9]+\\)") ;;; 任意の英字列に続く、任意の数字列を前方検索する
;;; abc012
(re-search-backward "\\([a-z]+\\)\\([0-9]+\\)") ;;; 同じく後方検索する
(buffer-substring
(match-beginning 0)(match-end 0)) ;;; "abc012"が取り出せる
(buffer-substring
(match-beginning 1)(match-end 1)) ;;; "abc"が取り出せる 1 は最初の \\(~\\)
(buffer-substring
(match-beginning 2)(match-end 2)) ;;; "012"が取り出せる 2 は最後の \\(~\\)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
re-search-forwardの方はちゃんとabc012が検索され、最初のキャプチャにabcが、二番目のキャプチャに012が入ります。
しかしre-search-forwardの方はなぜかc012が検索され、最初のキャプチャにcが、二番目のキャプチャに012が入ります。
なぜでしょうか。
Emacs 23.4.1を使っています。
よろしくお願いします。
お礼
ありがとうございます! >誤記 おっしゃるとおりです。 >最初にマッチするのが なるほど! Perlのように欲張りマッチではないのですね。 ううん、実用的には不便なような? ありがとうございました。