多重括弧でくくられた文字の強調表示No.14705
nari さん 03/05/20 18:41
 
すいません。秀丸の強調表示で、正規表現を使って
文章中の括弧でくくられた部分を赤色に表示しようとしています

まず。
・正規表現で\([^\)]+の指定をする。
次に
・正規表現で[^\(]+\)の指定をする。
とすると、それらしくなるのですが。

A(B(C)D(E)F)G

のような並びだと、Dが強調表示されません。

何か良い方法は無いでしょうか?

[ ]
RE:14705 多重括弧でくくられた文字の強調No.14706
きいろいまふらあ さん 03/05/20 20:02
 
>すいません。秀丸の強調表示で、正規表現を使って
>文章中の括弧でくくられた部分を赤色に表示しようとしています

>A(B(C)D(E)F)G
>
>のような並びだと、Dが強調表示されません。

もはや構文解析の世界だと思います。
いくつかの特定のパターンにマッチさせるものはできても、一般的な多重括弧の
認識を秀丸の正規表現でカバーするのはちょっと無理でしょう。

[ ]
RE:14706 多重括弧でくくられた文字の強調No.14707
でるもんた さん 03/05/20 20:30
 
でるもんたです。

> もはや構文解析の世界だと思います。
> いくつかの特定のパターンにマッチさせるものはできても、一般的な多重括弧の
> 認識を秀丸の正規表現でカバーするのはちょっと無理でしょう。

御意。

http://www.din.or.jp/~ohzaki/regex.htm
http://regexlib.com/
などを参考にすれば何とかなるかもしれませんが、秀丸の正規表現は Perl などに比
べると貧弱です。

さらに現在、鶴亀メールの 1 番会議室で持ち上がっている話題なのですが、秀丸・
鶴亀が使っている JRE32.DLL には、複雑すぎる正規表現を喰わせると落ちるという
問題があります。JRE32.DLL の作者とは現在連絡がつかず、ソースコードも公開され
ていないので、今のところ対処できないのだそうです。

[ ]
RE:14706 多重括弧でくくられた文字の強調No.14708
nari さん 03/05/20 21:49
 
>もはや構文解析の世界だと思います。
どうも。
普段、プログラミングもやらず、正規表現なんて、チョロチョロなんですが、ちょと
考える機会(聞かれたので)があったもので。
法律文にはカッコが多いのですが、読みにくいので、括弧内を色つけてみようとの趣
旨らしいです。
考えはじめたら、あれ?なんか以上に難しいなーと。
でも正規表現になれた方ならオチャノコなのかなー?と思ったので。
難しいと聞いて少し安心したような・・。

[ ]
RE:14707 多重括弧でくくられた文字の強調No.14709
アルビレオ さん 03/05/20 21:51
 
アルビレオです。

>http://www.din.or.jp/~ohzaki/regex.htm
>http://regexlib.com/
>などを参考にすれば何とかなるかもしれませんが、秀丸の正規表現は Perl などに比
>べると貧弱です。
>
>さらに現在、鶴亀メールの 1 番会議室で持ち上がっている話題なのですが、秀丸・
>鶴亀が使っている JRE32.DLL には、複雑すぎる正規表現を喰わせると落ちるという
>問題があります。JRE32.DLL の作者とは現在連絡がつかず、ソースコードも公開され
>ていないので、今のところ対処できないのだそうです。

Perlの正規表現だと入れ子のカッコに対応した記述ができるのか!
と思ってリンク先を見てみましたが、やっぱりできないようですね。

ちょっと本題とは外れますが、正規表現というものがもともと入れ子構造を記述
するのに向いてないのであって、Perl並の正規表現が使えれば解決するというわ
けではないと思うのですが。

[ ]
RE:14707 多重括弧でくくられた文字の強調No.14710
nari さん 03/05/20 21:54
 
>でるもんたです。
ども。

>http://www.din.or.jp/~ohzaki/regex.htm
>http://regexlib.com/
>などを参考にすれば何とかなるかもしれませんが、秀丸の正規表現は Perl などに
>比べると貧弱です。
ちょっとPerlとかが分からないので。

でも、強調表示の指定の表現として、正規表現を使うのなら、無理と考えたほうが良
いのでしょうね。

>さらに現在、鶴亀メールの 1 番会議室で持ち上がっている話題なのですが、秀丸・
>鶴亀が使っている JRE32.DLL には、複雑すぎる正規表現を喰わせると落ちるという
>問題があります。

これなんですが、複数起動した秀丸で、正規表現による強調表示の条件をイジッテイ
ルト、WIN2000がかなり頑固にフリーズしました。
全く復帰できない状態に。

[ ]
RE:14709 多重括弧でくくられた文字の強調No.14712
ohzaki さん 03/05/20 23:18
 
>>http://www.din.or.jp/~ohzaki/regex.htm
>Perlの正規表現だと入れ子のカッコに対応した記述ができるのか!
>と思ってリンク先を見てみましたが、やっぱりできないようですね。
>ちょっと本題とは外れますが、正規表現というものがもともと入れ子構造を記述
>するのに向いてないのであって、Perl並の正規表現が使えれば解決するというわ
>けではないと思うのですが。

perl5.6 から入れ子の括弧に対応した記述が可能です.

http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
が, (ほげ(ほげ(ほげ))ほげ) というような入れ子を許してマッチする正規表現のサ
ンプルスクリプトになります.

[ ]
RE:14712 多重括弧でくくられた文字の強調No.14713
アルビレオ さん 03/05/21 00:47
 
アルビレオです。

>perl5.6 から入れ子の括弧に対応した記述が可能です.
>
>http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
>が, (ほげ(ほげ(ほげ))ほげ) というような入れ子を許してマッチする正規表現のサ
>ンプルスクリプトになります.

いや、これって「Perlのコード」であって、単純な「正規表現パターン」とは言
えないんじゃないかと…

たとえば「括弧のネストが3より深い部分を削除」

(1(2)1(2(3)2(3(4)3)2)1(2(3)2)1)

(1(2)1(222)1(22)1)

なんてことを
検索:foo
置換:bar
という記述でできるかどうかという問題なんですが。

[ ]
RE:14713 多重括弧でくくられた文字の強調No.14714
きいろいまふらあ さん 03/05/21 09:02
 
>>perl5.6 から入れ子の括弧に対応した記述が可能です.
>>
>>http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
>>が, (ほげ(ほげ(ほげ))ほげ) というような入れ子を許してマッチする正規表現のサ
>>ンプルスクリプトになります.
>
>いや、これって「Perlのコード」であって、単純な「正規表現パターン」とは言
>えないんじゃないかと…

ですよね。逆にスクリプト(マクロ)でよければ、秀丸でも「ある程度の」こと
はできると思います。もちろん、目的が検索ではなく強調表示なので今回の場合
は役に立ちませんが。

[ ]
RE:14708 多重括弧でくくられた文字の強調No.14715
ENCODINGSHIFTJIS さん 03/05/21 09:42
 
>難しいと聞いて少し安心したような・・。
「難しい」のでなく、あらゆる場合を考えると理論的に「不可能」なのですが
[そのような正規表現は存在しない] そこは、実用的解決とかもあります。

形としてはこんな感じになるでしょう。

// 最外括弧の認識、行単位じゃない
// Locates the outer-most pair of parenthesis in a line ??
gofiletop
while(1){searchdown "(";if(!result)break;
                            escape; insert "<";
         gokakko;if(result) right;  insert ">";
 }
=========
他の方法としては、テキストから着色HTMLを作る、をするとか。

[ ]
RE:14713 多重括弧でくくられた文字の強調No.14716
ohzaki さん 03/05/21 10:05
 
>>perl5.6 から入れ子の括弧に対応した記述が可能です.
>>http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
>>が, (ほげ(ほげ(ほげ))ほげ) というような入れ子を許してマッチする正規表現のサ
>>ンプルスクリプトになります.
>いや、これって「Perlのコード」であって、単純な「正規表現パターン」とは言
>えないんじゃないかと…
>たとえば「括弧のネストが3より深い部分を削除」
>(1(2)1(2(3)2(3(4)3)2)1(2(3)2)1)
>↓
>(1(2)1(222)1(22)1)
>なんてことを
>検索:foo
>置換:bar
>という記述でできるかどうかという問題なんですが。

なるほど,たしかに「検索」と「置換」を与えられてという意味だとサンプルスクリ
プトでは駄目ですね.
しかし,それでも可能です.

$str = q{(1(2)1(2(3)2(3(4)3)2)1(2(3)2)1)};

$str =~ s/(\((?{$nest++})|[^()]+|\)(?{$nest--}))/@{[&{sub {$nest < 3 ? (($ne
st == 2 and $1 eq ')') ? "" : $1) : ""}}]}/g;

print $str, "\n";

とか,もっと極端な書き方をすると,

$str =~ s/(.*)/@{[&{sub {$1 を処理するコード}}]}/g;

とすれば何でも可能です.

$str =~ s{(?=(.*))(??{$1 から正規表現を作り出すコード})}{bar};

のように,(??{code}) で正規表現を作り出すこともできますし,@{[&{sub {cod
e}}]} で置換後の文字列を作り出すこともできるので,「検索」と「置換」を与えら
れてできないということはないでしょう.
perl5.6以降ではどちらにもコードを埋め込むことが可能になったことで何でもでき
るのです.

[ ]
RE:14716 多重括弧でくくられた文字の強調No.14717
アルビレオ さん 03/05/21 11:20
 
アルビレオです。

>なるほど,たしかに「検索」と「置換」を与えられてという意味だとサンプルスクリ
>プトでは駄目ですね.
>しかし,それでも可能です.
>
>のように,(??{code}) で正規表現を作り出すこともできますし,@{[&{sub {cod
>e}}]} で置換後の文字列を作り出すこともできるので,「検索」と「置換」を与えら
>れてできないということはないでしょう.
>perl5.6以降ではどちらにもコードを埋め込むことが可能になったことで何でもでき
>るのです.

話がずれてます…(^^;
Perlで置換できるかどうかではなく、「Perlと同等の正規表現を秀丸が実装した
ら可能なのか」というのが本来の話題のはずなのですが。

・コードの埋め込み
・変数の利用

の2つを実現するためには「Perlの正規表現」だけでは不十分で、「Perlそのも
の」を実装するのに等しいようなものです。

「できる」という例をあげるなら、上の2つの使わないものでお願いします。

[ ]
RE:14717 話題が秀丸からはなれたときNo.14718
ひろ さん 03/05/21 12:14
 
 皆さん今日は、ひろです。
> 話がずれてます…(^^;
 それ以前に、完全に秀丸から話題が離れてしまっていますよね。
 ##ただ、個人的には面白いし、有用な情報なので有り難い。

 今回に限らず、秀丸の話題から離れてしまうと、初心者、特に初めて訪れた
方は引いてしまうと思うので、適当なところで打ち切るか、
http://www.maruo.co.jp/turukame/3/
にでも移動した方がよいと思うのですが、皆さんはどう思われますか? ただ初
心者が訪れないとはいえ、本来開発版の会議室である
http://www.maruo.co.jp/turukame/3/
を、その様な使い方をして良いか? という問題はありますが(^^;...。

[ ]
RE:14715 多重括弧でくくられた文字の強調No.14719
nari さん 03/05/21 12:15
 
>[そのような正規表現は存在しない] そこは、実用的解決とかもあります。
>形としてはこんな感じになるでしょう。
>
>// 最外括弧の認識、行単位じゃない
>// Locates the outer-most pair of parenthesis in a line ??
>gofiletop
>while(1){searchdown "(";if(!result)break;
>                            escape; insert "<";
>         gokakko;if(result) right;  insert ">";
> }
>=========

どうもです。なんか、お話がPerlとかになってしまってついていけなくて寂しかった
のですが、これ、マクロなんですね。
#朝見たとき見落としました。

やってみると、おお!イイカンジ。
HTMLタグ内の強調表示を利用してるんですね。
なんかうれしい。

あ、もともと私に聞いてきた方はどうかわからないんだけど・・。

でも感謝です。

[ ]
RE:14717 多重括弧でくくられた文字の強調No.14722
ohzaki さん 03/05/21 15:10
 
>>perl5.6以降ではどちらにもコードを埋め込むことが可能になったことで何でもでき
>>るのです.
>話がずれてます…(^^;
>Perlで置換できるかどうかではなく、「Perlと同等の正規表現を秀丸が実装した
>ら可能なのか」というのが本来の話題のはずなのですが。
>・コードの埋め込み
>・変数の利用
>の2つを実現するためには「Perlの正規表現」だけでは不十分で、「Perlそのも
>の」を実装するのに等しいようなものです。

捕らえ方が逆になっています.
Perl の (?{code}) や (??{code}) は perl5.6以降で使えるようになった正規表現の
 1つです.「Perl と同等の正規表現」とした場合にはこれらの正規表現も含まれる
ことになります.そういう意味で Perl ならば可能だと書きました.
これらの正規表現を実現するためには,Perlそのものを実装するのに等しいというの
は間違いありませんが,code の部分で秀丸のマクロが書けるとなれば面白いかもし
れませんね.

(?{code}) や (??{code}) を使わない方法というと,残念ながら正規表現では無理で
しょう.

[ ]
RE:14718 話題が秀丸からはなれたときNo.14724
アルビレオ さん 03/05/21 16:48
 
アルビレオです。

> 皆さん今日は、ひろです。
>> 話がずれてます…(^^;
> それ以前に、完全に秀丸から話題が離れてしまっていますよね。
> ##ただ、個人的には面白いし、有用な情報なので有り難い。
>
> 今回に限らず、秀丸の話題から離れてしまうと、初心者、特に初めて訪れた
>方は引いてしまうと思うので、適当なところで打ち切るか、
>http://www.maruo.co.jp/turukame/3/
>にでも移動した方がよいと思うのですが、皆さんはどう思われますか? ただ初
>心者が訪れないとはいえ、本来開発版の会議室である
>http://www.maruo.co.jp/turukame/3/
>を、その様な使い方をして良いか? という問題はありますが(^^;...。

秀丸とは完全に無関係ではないけど、秀丸本体とは直接関係のない話題というこ
とで、
マクロ作者のための会議室(秀丸エディタ関連)
http://www.maruo.co.jp/turukame/4/
が適当ではないかという気もします。

管理者側からの誘導があればそれに従うとし、21時ぐらいまで反応がなければ
上記「マクロ作者のための会議室(秀丸エディタ関連)」にohzakiさんへの返信を
投稿することにします。
(誰かがこの話題の続きを別の場所に投稿すればそこに返信します)

[ ]