|
あくつです。
> Date: Tue, 20 May 2003 18:41:05 +0900
> From: nari <9xxxxxxxxxxxxxx@maruo.co.jp>
> Subject: hidesoft.2:14705| 多重括弧でくくられた文字の強調表示
これは、ネストレベルを一致させるものではありません。
代替案です。
(1) 入れ子を一切みとめないカッコ: \([^()]+\)
(2) (1)のカッコを含めるカッコ : \((?:[^()]|\([^()]+\))+\)
すると次のようになります。( 包含関係を示すインデントつき )
\([^()]+\)
\((?:[^()]|\([^()]+\))+\)
\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\)
\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\))+\)
\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\))+\))+\)
上から優先順序の高い強調表示に割り当てます。
===========================================================================
//bregif & bregex 版
//kakko.hilight
//\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\))+\))+\)
//17, HIGHLIGHT 1
//81, HIGHLIGHT 2
//145,HIGHLIGHT 3
//209,HIGHLIGHT 4
17,\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\))+\)
81,\((?:[^()]|\((?:[^()]|\([^()]+\))+\))+\)
145,\((?:[^()]|\([^()]+\))+\)
209,\([^()]+\)
(1 (2 (3 (4) 3) 2) (2) 1)
~~~ ~~~
これはネストを調べるものではないので、
(4) と (2) が同じハイライトになります。
~~~ ~~~
===========================================================================
//これが上手く行くか不明。テストしていません。
//標準 jre32.dll 版
//kakko.hilight
17,\(([^()]|\(([^()]|\(([^()]|\([^()]+\))+\))+\))+\)
81,\(([^()]|\(([^()]|\([^()]+\))+\))+\)
145,\(([^()]|\([^()]+\))+\)
209,\([^()]+\)
===========================================================================
アルビレオさん書く。
>(1(2)1(2(3)2(3(4)3)2)1(2(3)2)1)
>↓
>(1(2)1(222)1(22)1)
>
>なんてことを
>検索:foo
>置換:bar
>という記述でできるかどうかという問題なんですが。
$ perl -v | head -3
This is perl, v5.6.1 built for i386-linux-thread-multi
$ cat paren.pl
#!/usr/bin/env perl
while(<>){
while( m/(\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\([^()]*)\((?:[^()]|\([^()]
*\))*\)/ ){
s/(\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\([^()]*)\((?:[^()]|\([^()]*\))*
\)/$1/;
}
print;
}
$ cat a.tmp
(1(2)1(2(3)2(3(4)3)2)1(2(3)2)1)
(1(2)1(22(3(4)3)2)1(2(3)2)1)
(1(2)1(222)1(2(3)2)1)
(1(2)1(222)1(22)1)
(1(2)1(2()2((4))2)1((3)2)1)
$ perl paren.pl a.tmp
(1(2)1(222)1(22)1)
(1(2)1(222)1(22)1)
(1(2)1(222)1(22)1)
(1(2)1(222)1(22)1)
(1(2)1(222)1(2)1)
$ exit
先読み後読みを使って、一発でできるかも。(^^;)
では。
|
|