この正規表現でうまくいくのか?No.09851
さん 01/09/27 16:53
 
小西です.

Perlなどで文字列を強調表示するのに、強調表現で表してみたのですが、いまいち不
安です.
強調表現の式は下のようにしたのですが、とりあえず手持ちのサンプルではうまくい
くのですが、本当に正しいのでしょうか?

# 正規表現
"([^"]*|\\")*[^\\]"

要は、'"'と'"'の間をとって、中にある'\"'は終端じゃないよと指定してるつもりな
のですが(^^;;

[ ]
RE:09851 この正規表現でうまくいくのか?No.09854
秀丸担当 さん 01/09/27 18:07
 
>Perlなどで文字列を強調表示するのに、強調表現で表してみたのですが、いまいち
>不安です.
>強調表現の式は下のようにしたのですが、とりあえず手持ちのサンプルではうまく
>いくのですが、本当に正しいのでしょうか?
>
># 正規表現
>"([^"]*|\\")*[^\\]"

とりあえずやってみたところ、うまくいってそうな気がしますが・・・

実は強調表示を指定しなくても、
[ファイルタイプ別の設定]→[表示]→[コメント/文字定数のカラー表示]
で、Perlを指定すれば、文字列部分がカラーになります。
カラーは、
[ファイルタイプ別の設定]→[カラー]→[場所の一覧]
の中の文字定数の色を指定すればできます。


[ ]
RE:09851 この正規表現でうまくいくのか?No.09855
ひろ さん 01/09/27 18:17
 
 小西さん今日は、ひろです。
> Perlなどで文字列を強調表示するのに、強調表現で表してみたのですが、いまいち不
> 安です.
 強調表示を使わなくても、「ファイルタイプ別の設定」→「表示」→「コ
メント/文字定数のカラー表示」に「Perl」がありますが、これでは駄目な
のでしょうか?

> "([^"]*|\\")*[^\\]"
>
> 要は、'"'と'"'の間をとって、中にある'\"'は終端じゃないよと指定してるつもりな
> のですが(^^;;
'"([^"]|\\")*[^\\]"' の方がすっきりすると思います。ただこれでは、
'"\\"' が上手くいかないでしょう。

[ ]
RE:09851 この正規表現でうまくいくのか?No.09871
安久津 さん 01/09/28 17:06
 
>Perlなどで文字列を強調表示するのに、強調表現で表してみたのですが、いまいち不
>安です.
>強調表現の式は下のようにしたのですが、とりあえず手持ちのサンプルではうまくい
>くのですが、本当に正しいのでしょうか?

 力が欲しいか?

># 正規表現
>"([^"]*|\\")*[^\\]"

 力が欲しいのならくれてやる!!!
# 私があげるのではないが。(^^;)

(1) bregif.dll と bregexp.dll
http://hidemaru.xaxon.co.jp/
のライブラリーで、bregif2.lzh をとってきて、展開します。
readme.txt にしたがってインストールします。# bregexp.dll も必要。
すると Perl 風の正規表現が秀丸で使えます。

(2) bregif.dll で perl 強調。
# 正規表現。
# $_ =~ m/foo/i
m?\x2f[^\x2f\\]*(?:\\.[^\x2f\\]*)*\x2f[ixgcsmoe]*
# $_ =~ m!foo!i
m\x21[^\x21\\]*(?:\\.[^\x21\\]*)*\x21[ixgcsmoe]*
# $_ =~ s/foo/bar/im
\bs\x2f[^\x2f\\]*(?:\\.[^\x2f\\]*)*\x2f[^\x2f\\]*(?:\\.[^\x2f\\]*)*\x2f[ixgc
smoe]*
# $_ =~ s!foo!bar!im
\bs\x21[^\x21\\]*(?:\\.[^\x21\\]*)*\x21[^\x21\\]*(?:\\.[^\x21\\]*)*\x21[ixgc
smoe]*
# 文字定数、コマンドなど。
# q//  q!!  ''
# qq//  qq!! ""
# qx//  qx!! ``
# qw//  qw!! ()
\bq(?:q|x|w)?\x2f[^\x2f\\]*(?:\\.[^\x2f\\]*)*\x2f
\bq(?:q|x|w)?\x21[^\x21\\]*(?:\\.[^\x21\\]*)*\x21
# "string"
# 'string'
# `command`
\x22[^\x22\\]*(?:\\.[^\x22\\]*)*\x22
\x27[^\x27\\]*(?:\\.[^\x27\\]*)*\x27
\x60[^\x60\\]*(?:\\.[^\x60\\]*)*\x60
# 注1
# qq!Hello\n! でなく、qq%Hello\n% や qq{Hello\n} などは、
\bq(?:q|x|w)?\x25[^\x25\\]*(?:\\.[^\x25\\]*)*\x25
\bq(?:q|x|w)?\x7b[^\x7d\\]*(?:\\.[^\x7d\\]*)*\x7d

(3) "([^"]*|\\")*[^\\]"
だと、"" にはマッチしませんね。
ちなみに、上記の正規表現を 秀丸 v3.08 でやると、
 bregexp.dll もろとも、秀丸が死ぬ場合がある。

では。
# ジャバウォックの声ってどっかで聞いたことがあると思ったら、
# シャーじゃん。
# コメント高飛車だと思われたらどうしよう。(^^;)

[ ]
RE:09871 この正規表現でうまくいくのか?No.09872
さん 01/09/28 17:40
 
秀丸担当さん、ひろさん、安久津さん親切にありがとうございます.

以前にも書いたのですが、Perl4の文法で、サブルーチン呼び出しなどをしなければ
ならないので、秀丸のデフォルトのPerl強調ではいまいちよろしくなかったのでした.

安久津さんのとこまでいかなくても、とりあえずブランクの文字列は使わないだろう
 AND つかってても、強調されなくても困らんかな?ということで、ひろさんのシンプ
ル版を使わせてもらうことにしました.

どうもありがとうございました.

[ ]