30104


Vim-KaoriYa 8.0.39 (64bit) を使用しています。

[code]

    　吾輩《わがはい》は猫《ねこ》である。名前《なまえ》はまだ無い。
    
[/code]

のように漢字の後に括弧書きで読み仮名が書かれているShift_JIS（cp932）の文章があり、それをVimで

[code]

    　<吾輩|わがはい>は<猫|ねこ>である。<名前|なまえ>はまだ無い。
    
[/code]

のように置換編集したいのですが、`漢字《よみがな》`にマッチするパターンがわからず困っています。

Vim-
KaoriYaでは連続する漢字や平仮名、片仮名がそれぞれ１単語と見なされる（ように見受けられる）ので、`\<.\{-1,}\>《.\{-1,}》`で行けるかと思ったのですが、最短一致させているにも関わらず何故か

[code]

    吾輩《わがはい》
    は猫《ねこ》
    である。名前《なまえ》
    
[/code]

の３つにマッチしてしまいます。

何故このような結果になるのでしょうか。正しくマッチさせるにはどのようなパターンにすれば良いでしょうか。

なお、読み仮名が振られている漢字の直前に別の漢字がある場合（`焼肉定食《ていしょく》`のような）は考えなくて良いものとします。


CC BY-SA 3.0
2016-11-04T11:28:51.653
30102
2016-11-04T12:41:25.643
2016-11-04T11:54:19.643
2988
2988
question
正規表現 vim
「漢字《よみがな》」にマッチするパターン


raspbian jessie vim 7.4.488 にて、  
`%s/\([一-龠]*\)《\([^》]*\)》/<\1\2>/g`  
で置換できましたが、`焼肉定食《ていしょく》`も `<焼肉定食ていしょく>` になってしまうと思います。


CC BY-SA 3.0
2016-11-04T11:46:10.820
30104
2016-11-04T11:46:10.820
3507
30102
answer


漢字や平仮名にマッチさせるなら、Unicodeの`\p{Han}`や`\p{Hiragana}`を使いたくなります。vimではこのような指定はできません。・・・できるのかな？

素直に外部プログラムに投げてしまってはどうですか？

[code]

    :%!perl -Mutf8 -ple 'BEGIN { binmode $_, ":encoding(cp932)" for *STDIN, *STDOUT; } s/(\p{Han}+)《(\p{Hiragana}+)》/<\1|\2>/g'
    
[/code]

最短一致は`\{-}`ですが(`:help non-greedy`)、`.`は任意の一文字にマッチしますので(`:help
/.`)、漢字だろうが平仮名だろうが前のマッチより後全てにマッチします。


CC BY-SA 3.0
2016-11-04T12:41:25.643
30105
2016-11-04T12:41:25.643
62
30102
answer