• ベストアンサー

秀丸で正規表現を使って置換

あるファイルに関して、このような置換を行いたいです。 abc/xxx,yyy,zzz.html ↓ abc/xxx.html xxxとyyyとzzzはある任意の文字列(英数字で文字数はばらばら)で 「abc/」と「,」と「.html」は固定の文字列になります。 そこで、秀丸で開いて、正規表現による検索で、 「abc/.*,.*,.*.html」 として検索すると、該当部分が検索できることがわかりましたが、置換後をどのように設定すればいいのかわかりません。 置換後のabc/xxx.htmlの「xxx.html」の部分は検索前の任意の文字列をそのまま残したいのです。 秀丸の置換機能でこのようなことは可能でしょうか? 正規表現に関してあまり詳しくないので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.6

#5 の補足に対する回答です。 >検索キーワード中の、最後の.htmlの前の\マークにはどのような意味がある >のでしょうか? 正規表現におけるピリオド(.)は、改行以外の任意の一文字を表すメタ文字 です。 円記号(バック・スラッシュ)は、正規表現のメタ文字と言う機能を無効化 (エスケープ)します。 ---------------------------------------   (1)  (2)   (3)    (4)  .html  ahtml  xhtml  ●html --------------------------------------- 検索キーワード“.html”では、(1,2,3,4)すべてにヒットします。 検索キーワード“\.html”では、(1)にのみヒットします。 これで理解していただけるでしょうか。 ---- より詳しくは、「秀丸エディタ - ヘルプ」の「キーワード」から「正規表現」 で検索してみてください。また、WEBには正規表現を詳しく解説したサイトが あります。Googleなどで検索して、訪問してみてください。ただし、正規表 現には“方言”(ソフトごとの違い)があるので、そのことを認知しておい てください。

baby_baby_baby
質問者

お礼

よくわかりました。ありがとうございました。 エスケープの意味かな?とも思ったんですが、/の前にエスケープの\がなかったので「あれ?」と疑問に思いました。/ は、メタ記号の扱いではないということですかね?自分の中で/(バックスラッシュ)と\(ドル)が混同しています…。

baby_baby_baby
質問者

補足

お礼を投稿したあとすぐに気づきました。 「/」マークのことをバックスラッシュだと思っていました。違いますよね。お恥ずかしい限りです…。 これですべて納得です。 ありがとうございました!

その他の回答 (5)

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.5

#4 です。 回答を訂正します。 ------------------------------- 【検索キーワード】 .+/[^,]+\f.+\f\.html 【置き換えキーワード】 \0\2 ------------------------------- #4 の回答でも正しく置き換えできますが、不要な複雑さを回避しました。 失礼しました。

baby_baby_baby
質問者

お礼

たびたびありがとうございます。 検索キーワード、理解するのに時間がかかりましたが、調べながらなんとか意味がわかるまでになりました。 ところで、検索キーワード中の、最後の.htmlの前の\マークにはどのような意味があるのでしょうか?再び質問になってしまいますが、よろしくお願いします。

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.4

------------------------------- 【検索キーワード】 .+/\f[^,]+\f.+\f\.html 【置き換えキーワード】 \0\1\3 ------------------------------- 上のキーワードで置き換えることが出来ます。 下の例文で正常動作することを確認しました。  秀丸:Ver4.07  正規表現DLL:HMJRE.DLL Ver1.10 abc/xxx,yyy,zzz.html abc/aaaaa,bbbbbbbb,cc.html abc/dd,eeeee,fffffff.html dir/ggggggg,h,iii.html dir/subdir/jjj,kkkk,lllll.html    ▼ abc/xxx.html abc/aaaaa.html abc/dd.html dir/ggggggg.html dir/subdir/jjj.html

baby_baby_baby
質問者

お礼

正規表現にも、いろいろな表現の仕方があるのですね。 大変勉強になりました。 これを機にもっと勉強したいと思います。 ありがとうございました。

  • k_misaki
  • ベストアンサー率36% (17/47)
回答No.3

まずは、正規表現が苦手でも、ご質問のような状況で簡単に置換する方法を。 ファイル内(複数ファイルでも可)の該当する文字列をgrepで拾い出して 結果ファイルの該当箇所をすべて abc/xxx.html に変更し、一括で置換を すると便利です。たとえばこのようなマクロが利用できます。 http://hide.maruo.co.jp/lib/macro/greprep100.html あくまで正規表現で、ということであれば、わたしがよく参考にしている 場所は、こちらです。 http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html 直接的な回答ではありませんが、お役に立てれば。

参考URL:
http://hide.maruo.co.jp/lib/macro/greprep100.html , http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html
baby_baby_baby
質問者

お礼

秀丸のマクロ、ぜひ利用してみたいと思います。 ためになるサイトの紹介ありがとうございました。 正規表現についてもっと勉強したいと思います。

  • acacia7
  • ベストアンサー率26% (381/1447)
回答No.2

追加情報。 検索前に\f~\f~\fと\fで区切った場合、 最初の\f以前の部分にマッチするところを \0としてその後、\1,\2と名づけられ、 置換語の文字列にいれることが出来ます。

baby_baby_baby
質問者

お礼

早急に回答いただきましてありがとうございました。 \fで括ればよかったんですね、大変ためになりました。 どうもありがとうございました。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

検索文字列 abc/\f[a-zA-Z0-9]*\f,.*\.html 置換文字列 abc/\1.html としてください。 秀丸はVersion3.19で確認しました。

baby_baby_baby
質問者

お礼

早急に回答いただきましてありがとうございました。 解決しました。 おかげさまで作業が大幅に短縮できました。 どうもありがとうございました。

関連するQ&A