後方参照を置換出来ますか?No.32530
KRT さん 13/08/12 08:31
 
いつもお世話になります。
正規表現なので、サポート外とは思いますが、出来れば教えて下さい。

例えば、下記の様な日付で、年と月が同一なら、まとめて表記したい
2013/8/6-2013/8/7 => 2013/8/6-7
2013/8/11-2013/8/12 => 2013/8/11-12

検索文は、下記でいいかと思いますが、置換文が解りません。
\f([0-9]{4})\f/\f([01]?[0-9])\f/\f[0-3]?[0-9]\f-\1/\2/\f[0-3]?[0-9]\f

\1/\3/\5-\7 はダメでした。

何か手があればお教え下さい。

[ ]
RE:32530 後方参照を置換出来ますか?No.32531
アルビレオ さん 13/08/12 09:50
 
ユーザーのアルビレオです。

>例えば、下記の様な日付で、年と月が同一なら、まとめて表記したい
>2013/8/6-2013/8/7 => 2013/8/6-7
>2013/8/11-2013/8/12 => 2013/8/11-12
>
>検索文は、下記でいいかと思いますが、置換文が解りません。
>\f([0-9]{4})\f/\f([01]?[0-9])\f/\f[0-3]?[0-9]\f-\1/\2/\f[0-3]?[0-9]\f
>
>\1/\3/\5-\7 はダメでした。

これは置換文ではなく検索文の方が間違っていますね。
後半の \2 の部分は \3 になると思います。

また、"2013/8/"までをひとまとめで扱っても支障はないので
検索: ([0-9]{4}/[01]?[0-9]/)([0-3]?[0-9]-)\1([0-3]?[0-9])
置換: \1\2\3
と書くとすっきりしてミスも減らせます。

[ ]
RE:32530 後方参照を置換出来ますか?No.32533
秀丸担当 さん 13/08/12 12:09
 

\1・\2などを使った置換の方法は2種類あって、1つは\fを使う方法と、もう1
つは\fを使わずに()でくくった部分を\1・\2と解釈する方法があります。

詳しくはヘルプの
「目次− 検索系コマンド− 正規表現−一般的正規表現互換のタグ付き正規表
現」
「目次− 検索系コマンド− 正規表現−秀丸エディタ独自のタグ付き正規表現
 」
のところを参照してほしいです。

検索文字列の中に\1が使われる場合は、\fの方式は使えなくて、()でくくった部
分が使われます。
そのため置換文字列でも()の方式で書く必要があります。
そういうケースではヘルプの説明が充分でなかったので追記させていただきます。

アルビレオさんお書かれた方法か、元の正規表現をそのまま書き換えるとしたら、
以下のようになると思います。

検索文字列:
([0-9]{4})/([01]?[0-9])/([0-3]?[0-9])-\1/\2/([0-3]?[0-9])
置換文字列
\1/\2/\3-\4

[ ]
RE:32533 後方参照を置換出来ますか?No.32534
KRT さん 13/08/12 17:59
 
アルビレオさん、秀丸担当 さん
返事が遅れました。具体的な回答、誠に有り難う御座います。
基本的な理解不足でした。
ヘルプを含めて、よくわかりました。
お世話になりました。

[ ]