[mew-dist 21500] Re: problem on hiliting

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
2002年 8月 21日 (水) 09:22:50 JST


From: Tatsuya Kinoshita <tats at example.com>
Subject: [mew-dist 21498] Re: problem on hiliting

> > > 余分な"\"は書かないようにしてはどうでしょうか。
> > > ("^[[(][^])]+[: ][0-9]+[])]"というふうに)
> > 
> > ああ、なるほど。\ は不要(というか \ にマッチする)んですね。
> 
> いいえ、"\["と"["は同じ意味になります。(文字列のエスケープシーケ
> ンスと正規表現のクォートを混同しないように)

木下さんが正しいと思います。

'\' にマッチするグループは、"[\\]" って書くんじゃありませんか?

Perl ならリテラルで書く正規表現を、Emacs では文字列で書く必要があると
ころに、Emacs の正規表現の難しさがあります。文字列は、一回評価されるこ
とを忘れないようにしましょう。

'\' の扱いで頭が痛くなったら、評価してみることです。こんな風に:

(insert "[\\]\\\\")
	=> "[\]\\"

評価後の文字列は、Perl などで見慣れた形になるはずです。

regexp-quote() は評価の逆をやってくれる訳ではないので、Perl で見慣れた
形を書いて regexp-quote() する逆の方法は、使えません。

なお、Emacs の正規表現のグループですが、"[^...]" のように否定すると 突
然行末にもマッチするようになります。正規表現は行をまたがないという前提
で、うっかり否定を使うと、行をまたぐというワナにはまります。まぁ、正規
表現の実装が目に浮かぶようで、微笑ましいと言えば、微笑ましいのですが。:-)

	[X] = X, not \n
	[^X] = not X, including (not not \n = \n)

> 『GNU Emacs Lisp Reference Manual』の「Special Characters in
> Regular Expressions」が参考になるものと思います。

これ、かゆいところには、手が届かないです。きっと、正規表現を深く理解し
てない人が書いたに違いない。

--かず



Mew-dist メーリングリストの案内