- ベストアンサー
正規表現で一括置換の方法について
- 正規表現を使用して、テキストエディタで一括置換を行う方法について質問します。
- 現在、私は正規表現やPC言語の初心者ですが、一括置換について困っています。
- 特定の文章に対して一括置換を行おうとしていますが、10番目以降の代入文字が正しく機能しません。正しい表記方法を教えていただけないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Jedit X は、Macのアプリでよろしいですね? ヘルプの 「7.5 正規表現について」には > Jedit Xで搭載している正規表現エンジンは、oniguruma という最新最強の正規表現エンジンです。 とあります。 > (?<name>式) 名前付き捕獲式集合 とはあるのですが、手許の2.37では、名前付きは使えないようです。その代わり、 > 後で\1や\2などの番号で参照できるようになると同時に、\g<name> という名前でも参照できるようになります。 とあったので、\gによる参照は可能では?と考え、置換文字列を > \1♪\2♪\3♪\4♪\5♪\6♪\7♪\8♪\9♪\g<10>♪ としたところ、うまく動作しました。 ちなみに、検索文字列ですが .{1,1} を大量に使ってますが、これは . と等価です。 → (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)にそれぞれ♪マーク』 また、後半は後で使う訳では無いし、グループになっているわけでも無いので、()は不要です → (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『..........にそれぞれ♪マーク』 同じ表現が繰り返されているときこそ、{}の出番です → (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『.{10}にそれぞれ♪マーク』 > #2,#3 おそらく、後半の『一二三四五六七八九十にそれぞれ♪マーク』のある行だけ処理し、かつ、この文言を消したい、ということでしょうから、その方法では不適切かと思われます。 Perlかなんかで、変換スクリプト書くのが汎用的に使えて楽だと思った。 if( s/(.+)『.*にそれぞれ(.)マーク』/$1/ ) { $m=$2; s/(.)/$1$m/g ;} みたいなの。
その他の回答 (3)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
正規表現 ([一二三四五六七八九十]) 置換文字 \1♪ でいいのでは。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
いえ、正規表現はこの様に書きます。 ([一二三四五六七八九十]) ⇒ \1? 元の文章が 一二三四五六七八九十の数が三個あるとき であるとき、個や本が繫がっているときは変えたくなけりゃ ([一二三四五六七八九十])([^個本]) ⇒ \1\2 とすれば 一?二三?四五?六七?八九?十の数が三個あるとき なります。私はEmEditor(pro http://jp.emeditor.com/ )ですからファイルを開かなくてもフォルダー内、サブフォルダー内のファイルを一括して置換できます。フリー版は開いたファイルのみ。 最低限、POSIX の拡張正規表現( http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE#POSIX_.E3.81.AE.E6.8B.A1.E5.BC.B5.E6.AD.A3.E8.A6.8F.E8.A1.A8.E7.8F.BE )は身につけておくと良いでしょう。 もちろん、より高度な正規表現はPerl( http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE#Perl_.E3.81.AE.E6.AD.A3.E8.A6.8F.E8.A1.A8.E7.8F.BE )を使うほうが良いです。
- MillenniuM
- ベストアンサー率58% (42/72)
秀丸に特化した正規表現ライブラリでなくて、 PCREや鬼車系の正規表現を使えば名前付きキャプチャが できるので問題は解決できそうですが、 秀丸の制限でキャプチャは9個までと決まっているので、 外部プログラムを使うしか方法は無さそうです。 したがって、秀丸でサポートしてもらうか、 9個以下に分割して置換するか、PHP Perl Python Rubyといった 名前付きキャプチャが使える外部ツールで置換する、 ことになると思います。
お礼
macのJeditXでできました! 丁寧に教えていただきありがとうございます。