2008年7月17日木曜日

【emacs入門】11章 Emacs Lisp プログラミング (その2)

こつこつ。

  • 「lisp文字列用の正規表現構文とユーザコマンド(replace-regexpなど)用の正規表現構文には重要な違いが存在します。」
  • ああ、そうか。elispのreaderが読んだ後の文字列が正規表現であるように、'\'を配置するんだ。readerが読んだ結果を、次に渡すと。
  • それとは違い、mini bufferからの入力はそのままを次に渡す、と。
  • おお、^$とかを文脈、というのか。
  • 。。。 いまいち、この本の説明わからん。。。そこで、infoのelispをみてみる。

    • 正規表現には二種類のcharacterがある。ordinary charactersとspecial characters。
    • Special charactersは次のとおり。

      • どこでもspecial。
        `.', `*', `+', `?', `[', `^', `$', and `\'
      • 条件によってspecial。
        `]', `-', `[:', `:]'

    • [ ... ] は a character alternativeである。
    • character alternativeの中では、先のspecialはspecialでなくなる。ordinaryになる。character alternativeの中でspecialなのは、
      `]', `-', '^'
      である。
    • character alternativeの中で、specialになっている文字をordinaryとしてcharacter alternativeに含める方法は次のとおり。
      `]' : 先頭に置く : 例 `[]a]'
      `-' : 先頭か末尾に置く : 例 `[-a]' `[a-]'
      `^' : 先頭以外に置く : 例 `[a^]'
    • `\'には2つの機能がある。ひとつはここまでに紹介したspecial character(character alternativeの中のものは除く)をエスケープすること。もうひとつは、ここまでに紹介した以外のspecial characterを表現すること。
    • `\'との連続によってspecialになるのは次のもの。

      • 文字に関するもの
        `\|' `\{M\}' `\{M,N\}' `\( ... \)' `\(?: ... \)' `\DIGIT' `\w' `\W' `\sCODE' `\SCODE' `\cC' `\CC'
      • 文脈に関するもの
        `\`' `\'' `\=' `\b' `\B' `\<' `\>' `\_<' `\_>'

    • elispのread syntaxでは、文字列の構文において、`\'に特別な意味を与えている。直後の文字をエスケープする、という意味だ。よって、正規表現をelispの文字列で表すときには、正規表現の中の`\'を`\'でエスケープしなければならない。

  • おお、infoの方が本よりわかりやすい。
  • 本がわかりにくいのは、「演算子\\<」とか、書くから。「演算子\<」と書いてくれればよくて、それを正規表現文字列にするときに、"\\<"とかしてくれればよい。

明日は「11.3.3 標準ライブラリは宝の山」から。

0 件のコメント: