[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: replace-match



ただいま現実逃避中。(^^;;
# とてつもなく忙しくもなく、暇でもなく、ちょっと現実逃避はで
# きるくらいに切羽詰まっている、というのがどうも free
# software の開発には良いらしい。:-)

Katsumi@Yamaoka.cc writes:

> これもわかります。ぼくの感覚では "\\|" というものの実体は info
> で言うところの
> 
> `\|'
>      specifies an alternative.  Two regular expressions A and B with
>      `\|' in between form an expression that matches anything that
>      either A or B matches.
> 
> なのだから replace-match の doc-string にある
> 
>   `\\' means insert one `\'.
> 
> を一回だけ使えば良いのではないか、ということでした。XEmacs でも
> 過去に同じような議論があったのかもしれませんね。(林さん見てる?)

最近のはまともに追っかけてないのではなはだ怪しい記憶ですが、
replace-match の仕様の変更は diff.el を使うための Michael さ
んによる Emacs 互換仕様の追加くらいしか記憶にありません。
ChangeLog でもそれくらいしか見あたりませんし。

XEmacs は \ の後に特別な文字が来ない場合は \ を literal とし
てそのままにする、Emacs はエラーになる、という仕様の違いで、
意図しない間違いを防ぐ意味では Emacs の仕様の方が良いと思い
ます。

Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp> writes:

> そうですね。ぼくはもっと単純に \ は特別な文字だから \ でクォート
> しないといけないよね、\\ は二つで一つだよ、と感じただけです。
> 
> "\\1\\|nntp:\\2"	<= これはイマイチぴんとこない
> "\\1\\\\|nntp:\\2"	<= やっぱこれでしょう。
> 
> replace-match では \ を特別扱いするなら
> 
> "\1\\|nntp:\2"		<= これなら直感的で良いと思うけど
> 
> じゃないかとも思うのです。

むしろ、内部的には上の直感的な文字列を使っているけれど、Lisp
reader の都合で "\\1\\\\|nntp:\\2" と書かなければならない、
と考える方が良いような気がします。

私がこういうのを書く場合は、まず "\1\\|nntp:\2" と書いてから、
全部の \ を \\ に置き換えるようにしています。

-- 
Yoshiki Hayashi