|
カテゴリ:xyzzy
バッファ内を検索するには、
(scan-buffer "[0-9]+" :regexp t) と、scan-bufferを使えばよい。regexpにtを与えると正規表現による検索となる。 文字列内を正規表現で検索するには、 (string-match "[0-9]+" "abc98 cc") と、string-matchを使えばよい。 一致した位置を返してくれる。 一致した内容を取得するには、 (match-string 0) を使う。0は一致した内容全体で、参照は1~9を使う。 気をつけなければいけないのは、エスケープ文字だ。 C:\WINDOWS\SYSTEM32\\([^.]+\).dllという検索をしたいときは、 lisp上では、エスケープ文字(\)と解釈される部分に注意が必要だ。 C:\\WINDOWS\\SYSTEM32\\\([^.]+\).dllとすればよさそうだが、うまく動かない。 C:\\\\WINDOWS\\\\SYSTEM32\\\\\\([^.]+\\).dllとするとうまくいく。 エスケープ文字でないパスの区切りを表すために、\\とするが、2度解釈されるようなので さらにエスケープする必要があるようだ。 したがって、「\」は「\\\\」となる。グルーピングの「\(」は「\\(」となる。 scratchで以下を試してみればわかる。 (string-match "C:\\\\WINDOWS\\\\SYSTEM32\\\\\\([^.]+\\)\\.dll" "COPY C:\\WINDOWS\\SYSTEM32\\USER32.dll C:\Backup") 4が返されるだろう。文字列としてエスケープを解釈し、さらに、string-matchの評価の際にエスケープを解釈していると思われる。 お気に入りの記事を「いいね!」で応援しよう
Last updated
2007/10/17 09:11:13 AM
コメント(0) | コメントを書く
[xyzzy] カテゴリの最新記事
|