\1を利用した置換No.10856
マボカル さん 06/07/25 02:18
 
こんにちは。マボカルです。\1を利用した置換を行っているのですが、
置換結果が統一したものにならなくて、バグなのか\1の機能の仕様
なのかご質問いたします。

検索文字:((よう)(だ|な|に|で))
置換文字:\t\1\t

要するに「ようだ」「ような」「ように」「ようで」のような文字列
を探して、その前後をタブで区切るという作業ですが、以下のような
例文1では問題ありません。

【例文1】置換実行前
10010101.txt(15): 「駅長さんずいぶん厚着に見えますわ。弟の手紙には、まだチョ
ッキも着ていないようなことを書いてありましたけれど。」

【例文1】置換実行後
10010101.txt(15): 「駅長さんずいぶん厚着に見えますわ。弟の手紙には、まだチョ
ッキも着ていない [tab] ような [tab] ことを書いてありましたけれど。」

ところが次の例文2の場合は、奇妙な置換結果になります。

【例文2】置換実行前
10040201.txt(148): そのうちに私たちがやっと短い会話を取り交わすようになり、
それと共に、屡しば、私は彼女の顔をまともから眺めるようになったのにも拘らず、
彼女の顔がなおも絶えず変化しているのに愕いた。或る時は、その顔はあんまり血色
がよく、すべすべしているので、私のためらいがちな視線はいくどもその上で空滑り
をしそうになった。また他の時はすこし疲れを帯びたように沈んで、不透明で、その
皮膚の底の方にはなんだか菫色のようなものが漂っているように見えた。そうかと思
うと、その皮膚がすっかり透明になり、ぽうっと内側から薔薇色を帯びているような
こともあった。ときどき以前に見たのと何処か似たような顔をしていることもあった。
が、その顔は決して二度と同じものであることはなかった。

【例文2】置換実行後
10040201.txt(148): そのうちに私たちがやっと短い会話を取り交わす [tab] ように
 [tab] なり、それと共に、屡しば、私は彼女の顔をまともから眺める [tab] ように
 [tab] なったのにも拘らず、彼女の顔がなおも絶えず変化しているのに愕いた。或
る時は、その顔はあんまり血色がよく、すべすべしているので、私のためらいがちな
視線はいくどもその上で空滑りをしそうになった。また他の時はすこし疲れを帯びた
 [tab] ・ェす [tab] 沈んで、不透明で、その皮膚の底の方にはなんだか菫色の [ta
b] うなこ [tab] ものが漂っている [tab] どき以 [tab] 見えた。そうかと思うと、
その皮膚がすっかり透明になり、ぽうっと内側から薔薇色を帯びている [tab] ある
こ [tab] こともあった。ときどき以前に見たのと何処か似た [tab] ような [tab]
顔をしていることもあった。が、その顔は決して二度と同じものであることはなかっ
た。

これを見るに、\1を使った置換を行う場合、一行に複数の置換文字列が
ある時は、不正確な結果になるということです。ひどいものになると、
「・ェす」などのように文字化けを起こしているものも見られます。
これって私の使い方が悪いのでしょうか?

もう一つ不思議なことは、同じ内容の例文であっても、行頭のグレップ
結果をあらわす 10040201.txt(148): を削除して同じように置換を
行うと、例文2の置換実行後とはまた違った結果が出ます。

【例文3】(行頭の 10040201.txt(148): を削除後置換実行)
そのうちに私たちがやっと短い会話を取り交わす [tab] ように [tab] なり、それと
共に、屡しば、私は彼女の顔をまともから眺める [tab] ように [tab] なったのにも
拘らず、彼女の顔がなおも絶えず変化しているのに愕いた。或る時は、その顔はあん
まり血色がよく、すべすべしているので、私のためらいがちな視線はいくどもその上
で空滑りをしそうになった。また他の時はすこし疲れを帯びた [tab] 膚がす [tab]
沈んで、不透明で、その皮膚の底の方にはなんだか菫色の [tab] うなこ [tab] もの
が漂っている [tab] きどき [tab] 見えた。そうかと思うと、その皮膚がすっかり透
明になり、ぽうっと内側から薔薇色を帯びている [tab] である [tab] こともあった。
ときどき以前に見たのと何処か似た [tab] ような [tab] 顔をしていることもあった。
が、その顔は決して二度と同じものであることはなかった。

しかしいずれの場合も、置換対象の文字列が一行に複数存在する場合は
正確な結果がでないようです。

最近HTML版のヘルプもずっと表示されなくて詳しい確認もできません。
\1と()の使い方に関して問題があるのか、無いのか判断もできない状況
ですが、一応バグっぽいので報告いたします。

【使用環境】
韓国語版XP
秀丸英語版MaruoVer6b35
使用文字コード(S-JIS, UFT-8, または保存していない新規ファイル)

[ ]
RE:10856 \1を利用した置換No.10857
白雲斎 さん 06/07/25 11:30
 
単なる報告です。

>検索文字:((よう)(だ|な|に|で))
>置換文字:\t\1\t

私も、マボカルさんと同じ結果になりました。
Windows XP日本語版, 秀丸 6.00β35

以下、検索キーワードを変更した結果:

    検索文字:(よう(だ|な|に|で))
    置換文字:\t\1\t
    結果:×

    検索文字:よう(だ|な|に|で)
    置換文字:\t\0\t
    結果:○

    検索文字:よう\f(だ|な|に|で)
    置換文字:\t\0\1\t
    結果:○

    検索文字:\fよう\f(だ|な|に|で)
    置換文字:\t\1\2\t
    結果:○

[ ]
RE:10857 \1を利用した置換No.10858
秀丸担当 さん 06/07/25 12:12
 

>これを見るに、\1を使った置換を行う場合、一行に複数の置換文字列が
>ある時は、不正確な結果になるということです。ひどいものになると、
>「・ェす」などのように文字化けを起こしているものも見られます。
>これって私の使い方が悪いのでしょうか?

調べてみたところ、β34での修正でレベルダウンしていまいました。
申し訳ありません。
修正させていただきます。

[ ]
RE:10856 \1を利用した置換No.10859
三月 さん 06/07/25 12:16
 
再現条件情報ですが、
折返し固定(80文字)
で実行すると起きるようです。

2000文字とか折り返さない場合は起きないようです。

WinXPSP2+秀丸6.00β35

[ ]
RE:10859 \1を利用した置換No.10861
マボカル さん 06/07/25 14:11
 
やっぱりレベルダウンでしたか。投稿して良かったです。
ほかのみなさんも追加報告ありがとうございました。

[ ]
RE:10857 \1を利用した置換No.10862
マボカル さん 06/07/25 14:30
 
白雲斎さん

>以下、検索キーワードを変更した結果:
>
>    検索文字:(よう(だ|な|に|で))
>    置換文字:\t\1\t
>    結果:×
>
>    検索文字:よう(だ|な|に|で)
>    置換文字:\t\0\t
>    結果:○
>
>    検索文字:よう\f(だ|な|に|で)
>    置換文字:\t\0\1\t
>    結果:○
>
>    検索文字:\fよう\f(だ|な|に|で)
>    置換文字:\t\1\2\t
>    結果:○

こういった記述方法もあるんですね。面白いです。特に

>    検索文字:よう(だ|な|に|で)
>    置換文字:\t\0\t
>    結果:○

の記述は以外でした。検索文字に\fとか指定しなくても、置換文字に
\0とかが使えるんですね。動作確認をしただけで、なぜそうなるのか
というところまでまだ理解できていませんが、とても参考になる事例
でした。


[ ]