[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 メーリングリストの案内