Emacs Lispの検索とキャプチャが変?

このQ&Aのポイント
  • Emacs Lispの検索方法とキャプチャの動作について質問です。
  • re-search-forwardとre-search-backwardを使用した際、キャプチャが正しく動作しない現象が発生します。
  • Emacs 23.4.1を使用している場合に限り、re-search-forwardのキャプチャが異なる結果を返す問題が発生しています。
回答を見る
  • ベストアンサー

Emacs Lispの検索とキャプチャが変?

お世話になります。 以下のようなスクラッチバッファで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を使っています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

> しかしre-search-forwardの方はなぜかc012が検索され、最初のキャプチャにcが、二番目のキャプチャに012が入ります。 上記の文は、re-search-backward の誤記? re-search-backward はポイント地点から1文字ずつ戻りながら正規表現マッチを試み、最初にマッチするのが c102 の地点だからではないでしょうか。

TYWalker
質問者

お礼

ありがとうございます! >誤記 おっしゃるとおりです。 >最初にマッチするのが なるほど! Perlのように欲張りマッチではないのですね。 ううん、実用的には不便なような? ありがとうございました。

関連するQ&A

  • 正規表現 許可文字列 かつ 指定連続文字列の排除

    わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。

    • ベストアンサー
    • PHP
  • Accessで文字列検索

    Accessであるテキストボックスに入ってるデータから任意の文字列の位置を知りたくて、 関数を使ってみました。 使った関数はFINDとSEARCHですがどちらもダメでした。 Accessで使える文字列検索関数はないのでしょうか?

  • PHPで部分一致検索をしたい

    PHPの勉強をしています。 簡単なPHPを作成し、MySQLからデータを持ってきたいのですが、 上手くいきません。 完全一致で入力すれば、該当するものがヒットしますが、部分一致となると何も表示されなくなってしまいます。 検索文字列 = 山田太郎   →検索OK 検索文字列 = 山田 →検索NG となります。 山田と入力すれば、該当するデータを全て表示するにはどうすればいいのでしょうか。 宜しくお願いします。 //名前 if(!empty($name)) { $name = addslashes($name); $where = "name = '$name' && "; } else if(preg_match("/^(?!ab$)[a-z0-9]+$/", $name)) { $name = addslashes($name); $where = "name = '$name' && "; }

    • 締切済み
    • PHP
  • 検索窓をクリックすると文字が消える方法

    初歩的な質問ですいません。 下記のURLの「検索窓をクリックすると文字が消える」を参考にしました。 http://fb.skr.jp/bowz/archives/001990.html HTMLは <input type="search" value="Search" onfocus="if (this.value == 'Search') { this.value='' }" onblur="if (this.value == '') { this.value='Search' }" /> で、この説明は 検索窓に「Search」が最初から表示 → 検索窓にカーソルを表示 → 文字が消える → 空白なら「Search」が再 び出る というようになっていますが、 私の希望としては 検索窓は最初から空白 → 検索窓に任意の文字を入力 → 検索窓にカーソルを表示 → その任意の文字が消える としたいのですが、このHTMLを存知であれば教えてください。

    • ベストアンサー
    • HTML
  • チェックボックスを使って条件検索をしたい

    チェックボックスにチェックされたものについて、データベースで条件検索をしたいです。 形としては、チェックボックスで任意にチェックできて、最後に送信ボタンを押すと検索結果ページがでてくる仕組みにしたいです。 いちおうこうなってくれればいいんだけど、っていうのがあるんですけど、 例えば、 □goo をチェックすると http://www.abc.com/database.cgi?table=xx&search=goo のように語尾に&search=gooがくっついた形でリンクをさせたいです。 チェックが複数の場合は、 □goo □教えて □神様 だとすると、 http://www.abc.com/database.cgi?table=xx&search=goo,教えて,神様 のように,で区切ってリンクをさせたいです。 ちなみに、使ってるデータベースはHeRO DBです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • チェックボックスを使って条件検索

    チェックボックスにチェックされたものについて、データベースで条件検索をしたいです。 形としては、チェックボックスで任意にチェックできて、最後に送信ボタンを押すと検索結果ページがでてくる仕組みにしたいです。 いちおうこうなってくれればいいんだけど、っていうのがあるんですけど、 例えば、 □goo をチェックすると http://www.abc.com/database.cgi?table=xx&search=goo のように語尾に&search=gooがくっついた形でリンクをさせたいです。 チェックが複数の場合は、 □goo □教えて □神様 だとすると、 http://www.abc.com/database.cgi?table=xx&search=goo,教えて,神様 のように,で区切ってリンクをさせたいです。 ちなみに、使ってるデータベースはHeRO DBです。 よろしくお願いします。

  • emacs lisp

    OS:ubuntu feisty fawn app:emacs-snapshot (emacs23) アンチエイリアスフォントのためにemacs23を使用しております。 実行したのは以下のとおり。 sudo apt-get install emacs-snapshot emacs-snapshot-el .emacs.el (autoload 'c++-mode "cc-mode" nil t) (add-hook 'c-mode-common-hook (lambda () (setq c-set-style "linux") c-basic-offset 4)) (setq auto-mode-alist (append '(("\\.cpp$" . c++-mode)auto-mode-alist)) cc-modeのバージョンは5.28です。 この設定を施したにもかかわらず、Syntax highlightが動いてくれません。(強調表示) どなたかご教授願えませんでしょうか? よろしくお願いします。

  • (Excel VBA)困っています・・・orz

    エクセルを使うとある業務でマクロを組み、最適化を図ろうと試みているのですが 気がつけば高度な領域に突入していまして、僕みたいなレベルじゃ全然???な状況になってしまいました。 まず A列の1行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の文字列(ABCなど)があるとします。 それからオートフィルタを使い、A列からある任意の文字列(ABCなど)を検索条件にしてデータを抽出します。 抽出されたデータベースのA列には検索条件にある「ABC」が任意の行まであり、その抽出されたデーターベースのD列に今度は「XYZ」とという文字列を 抽出された分の最終行まで割り振る・・・ つまりA列《ABC》で検索され抽出されたデータのD列には《XYZ》が自動に入力される もし、検索条件(ABC)で抽出されたデータが「0」件だった場合は、D列には何もせず、次の検索条件に進む・・・ というものをマクロで組みたいのですがどうやったらよいのでしょうか?? 何卒、ご教授お願い致します。

  • ExcelVBAで行と列の検索

       A  B  C  D  E 1  コード あ  い  う  え 2  10  ○    ○ 3  20     ○  ○ 4  30          ○ 上記の表が5000件あります。Textbox1に入力し検索ボタンを押すと A列のコードを検索して一致する列の○のあるところの1行目の項目 をtextbox2に表示したいのですがうまく行きません。 よろしくお願い致します。 Private Sub CommandButton1_Click() '検索フォームボタン Dim i As Long Dim 最終行 As String Dim サーチ行 As Long Sheets(1).Activate 最終行 = Range("A1").End(xlDown).Row サーチ行 = 0 For i = 2 To 最終行 If TextBox1.Value = Range("A" & i) Then If Range("B" & i, "N" & i) = "" Then TextBox2.Text = Range("B1", "N1") サーチ行 = i Exit For End If End If Next If サーチ行 = 0 Then MsgBox TextBox1.Value & "データはありません。", vbInformation, "無し" End If TextBox1.SetFocus End Sub エラーはでません。データはありませんとなります。  

  • 秀丸で正規表現を使って置換

    あるファイルに関して、このような置換を行いたいです。 abc/xxx,yyy,zzz.html ↓ abc/xxx.html xxxとyyyとzzzはある任意の文字列(英数字で文字数はばらばら)で 「abc/」と「,」と「.html」は固定の文字列になります。 そこで、秀丸で開いて、正規表現による検索で、 「abc/.*,.*,.*.html」 として検索すると、該当部分が検索できることがわかりましたが、置換後をどのように設定すればいいのかわかりません。 置換後のabc/xxx.htmlの「xxx.html」の部分は検索前の任意の文字列をそのまま残したいのです。 秀丸の置換機能でこのようなことは可能でしょうか? 正規表現に関してあまり詳しくないので教えてください。