プロが教える店舗&オフィスのセキュリティ対策術

テキストエディタ mi で正規表現のより「※補足」という文字列を含む行だけ残して他の行を削除しようとしています。

具体的には、

検索文字列 ^(?!.*\※補足).*$
置換文字列            ← 空白

としてやっているんですが、例えば

  なんとかかんとかで何やらが何として…
  ※補足:よくわかりません

  ※補足:質問します

というテキストを上の方法で全置換すると何も起きません。

そこで試しに

検索文字列 ^(?!.*\※補足).*$
置換文字列 -----

としてみました。
この場合、本当なら

  -----
  ※補足:よくわかりません
  -----
  ※補足:質問します

となることを期待していたのですが、実際は


  -----なんとかかんとかで何やらが何として…
  ※補足:よくわかりません
  -----
  ※補足:質問します

となってしまい、要するに「※補足」という文字列が含まれない行は正しく見つけてくれるものの、含まれていない行については、その行丸ごとを置き換えるのではなく行頭に置換文字列を付加するだけになってしまいます。

これは、何がどう悪いのでしょうか?

ちなみに、こちらのサイトで「テキストで特定の文字列を含む行を削除」とQ&Aを検索すると、私の場合で言えば「^.*※補足.*\n」→「」(空白)という置換えで可能というご回答が見つかるのですが、miの場合、これでは「※補足」という文字列が含まている行も含まれていない行も見つけてくれませんでした。

どう直せば目的が達成されるか教えて頂けないでしょうか?
どうかよろしくお願い致します。

A 回答 (1件)

mi の正規表現対応はクセがあるので、一般向けの記述が当てはまらない場合があります。



例えば「^.*※補足.*\n」→「」が機能しないのは、mi では改行コードを \r とすることになっているからです。「^.*※補足.*\r」→「」とすれば「※補足」を含む行を空白に変えてくれるはずです。

「^(?!.*\※補足).*$」が意図した通りに動かない理由も、多分何かの仕様の違いでしょう。試しに Jedit X で実行してみたら、ちゃんと「※補足」を含まない行を空白に変えてくれましたので、正規表現の文法自体は一般に通用するものです。
    • good
    • 0
この回答へのお礼

早々のご回答をどうもありがとうございます。

何と! 仕様の違いなんてあったんですね。
なるほど、Jeditを試用版でもらってきて試してみたところ、確かに機能しました。
検索してみたところ、miの正規表現一覧なるページも見つかりました。

色々試してみたところ、Dreamweaverで使ったことのある正規表現が、今度はJeditで通用しませんでしたし、一口に正規表現と言ってもアプリケーションごとに互換性がない部分があるとは知りませんでした。

いやー、知識が浅すぎました。
どうもありがとうございました。

お礼日時:2009/10/30 16:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!