• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現の使い方をお教えください)

正規表現の使い方を学ぼう

pacman_chieの回答

  • ベストアンサー
回答No.3

No.1 です。 私とORUKA1951さんで、読み取った条件が違っちゃってますね。日本語の解釈に左右されない、具体的な「例文と期待する結果」という説明方法を強く推奨します。 私は「削除する範囲を選択(マッチ)させる」という条件で回答しましたが、「置換により、結果的に削除されれば良い」ということであれば、ORUKA1951さんの言うとおり様々な方法があります。 例えば私の解釈(最後の「削除」を含んで行末まで削除)だと、ORUKA1951さんの b) を変形して、 置換前:(.*)削除.*$  ⇒置換後:\1  …となります。 それと回答ではありませんが…ORUKA1951さん、僭越ながら添削させてください。(きっと向学心のある方だと思いますので。) ORUKA1951さんは、最後の「削除」の次の文字から行末までを削除、と解釈して方法を2つ示したのですよね。 >a) 最後の削除以降を削除 >[^削除]*?$   ⇒ これはダメです。「削除」の後にもし「削」や「除」が入っていると破綻します。また、「削」や「除」を含まない行全体にもマッチします。 それと、「以降」という言葉があいまいになっているような。普通、以上とか以降はそれ自身を含みますよね。 この条件(削除する範囲を選択(マッチ)させる)ですとスマートな正規表現を思い付きませんが、こうなります。 置換前:(?<=削除)((?!削除).)+$  ⇒置換後:(何も書かない) >b) 最後の削除を含む前を残す >(.*削除).*?$  ⇒\1 間違ってはいないですが、この場合 ? は必要ありません。つまり (.*削除).*$ となります。 細かく説明しますと、カッコ内の .* が一旦行末まで食べてそこからバックトラックしていくので、「削除」を発見したときは自然と .*?$ の状態になっているからです。 よく ? は「最短マッチ」と間違った説明がされています。正しくは「非欲張り(Non-Greedy)マッチ」ですのでご注意ください。 このような例が分かりやすいでしょう。AxxAxxxAxB これを A.*?B で検索すると、AxB ではなく AxxAxxxAxB 全体にマッチします。 >削除が2個以上、いくつもある場合、二つ目の削除以降は >([^削除]*削除[^削除]*削除).*?$ a) と同じく、もし「削」や「除」が入っていると破綻します。 それと .* でない検索なら ^ も追加する必要があります。(行頭を避け、好きな位置から食べ始めてしまうため。) ・ n個目の「削除」の次の文字から行末まで削除 置換前:^((?:.*?削除){n}).+$(nに半角数字を入れます)  ⇒置換後:\1 ・ n個目の「削除」を含んで行末まで削除 置換前:^((?:.*?削除){x}.*?)削除.*$(xにn-1の半角数字を入れます)  ⇒置換後:\1 以上、ご参考になれば幸いです。

yama0192
質問者

お礼

  早速の回答ありがとうございます。   質問の仕方も含めて親切な回答ありがとうございました。   今回の回答読ませていただいて正規表現の奥の深さの一部を   知る思いです。   これに懲りず今後も宜しくお願いいたします。   大変ありがとうございました。

関連するQ&A

  • 正規表現の使い方をお教えください

    サクラエディター使っていますが・・・。  例・正規表現である文字が行の二か所以上あるとき最初に出てくる文字より・ この場合「文字」が二か所ありますが先に出てきた「文字」より前を削除したいのですが 後の方の「文字」より前側削除なってしまいますがどのようにすればよいのかお教えください。   宜しくお願いします。

  • サクラエディタの正規表現での置換

    サクラエディタの正規表現での置換の方法について教えて下さい。 行の末尾が数字で終わらない行の改行コードを削除したいと考えています。 ---------- 元ファイル ---------- 000abc123 777def 456 333ghi789 222jk+ 111 ---------- ---------- 加工後 ---------- 000abc123 777def456 333ghi789 222jk+111 ---------- 「置換前」は『[^0-9]\n』を入力することで検索できましたが、 「置換後」に何を設定すれば良いのかわかりません。(または「検索対象」の設定を変える必要があるのかなど) 例えば置換後に何も設定しないと「777de456」とfが消えてしまうため、”f”を残した上で改行コードを削除したいのですが その方法がわかりません。 よろしくお願いいたします。

  • 正規表現について教えてください。

    Perlとは関係ないのですが、正規表現での置換ができるエディタで改行二つを一つにしたいです。 置換前 \n\n 置換後\n としてみたのですがうまくいきません。まちがってたら教えてください。 CRLFとか気にしないといけないのかな。

    • ベストアンサー
    • Perl
  • 正規表現で置換

    正規表現の初心者です。 テキストエディタを使って、「@:」で始まる以外の行の先頭に「//」を挿入してコメントアウトしたいのですが、正規表現がうまく書けません。 検索対象: ^[^(@:)] 置換文字列: // でいいのかなと思ったのですが、[]の中ではグルーピング用の()も文字として認識されてしまうのですね。 どのように書いたら正しく置換されるでしょうか。 どうかご教示ください。

  • 正規表現について教えてください

    これから正規表現を勉強しようとする者です。 次の2点について教えて頂きたいのですが、よろしくお願いします。 1.次のような置換をする正規表現は? 例えば、 ■■■ あいうえお かきくけこ ■■↓ ○○○ あいうえお かきくけこ ○○○ というテキストがある場合、○○○~○○○までの「あいうえお」 のみを「アイウエオ」に置換するには、どのような正規表現にすれば 良いのでしょうか? 2.秀丸エディタでは、フォルダ内の全ファイルを一括で置換する 事はできるのでしょうか? 以上2点です。 よろしくお願いします。

  • 正規表現を教えて下さい。

    正規表現を教えて下さい。 1行目の各拡張子を(赤)、2行目の行頭のsakuraを(青)、それ以外を(黄)に色分けする正規表現を教えて頂けないでしょうか。 [.txt;.ini;.cfg; sakura|"D:\Program Files\sakura\sakura.exe" "%P" ] サクラエディタ ver.1.6.50

  • 正規表現について

    正規表現で、最初に出てきた条件に合うものだけマッチさせて置換したく、それ以降に条件に合うものがあってもマッチさせたくないのですが、どうすればいいでしょうか? 現在、オプションはつけてないのですが、最後にマッチしたものがとりだされてしまいます。 ---------------------------------------- s/aaa(.*)ccc/$1/; ・・・・・正規表現 ---------------------------- aaabbbccc : : aaadddccc : aaaeeeccc ---------- だと、eeeに置換されるのですが、bbbに置換したいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 秀丸での正規表現

     秀丸エディタVersion 7.11、HMJRE.DLL V1.92 を使用しています。  下記上のような4行のテキストファイルから、数字以外で始まる行を空行に置換しようと思い、検索文字列を「^[^0-9].*」、置換文字列を「」(なし)に設定したのですが、3行目のx だけからなる行は削除されませんでした(下記下のようになりました。このとき、カーソルは変換後の2行目の一番左のx の右側にあります)。 置換前 >11111 > >xxxxx >[EOF] 置換後 >11111 >xxxxx カーソルは左端のx の右側 >[EOF]  11111 とxxxxx の間にもう1行空行を入れると、所望の動作となります。  正規表現の指定が間違っているのでしょうか。

  • 文頭が一致するものの末尾を置換したい。正規表現で実現できるでしょうか?

    文頭が一致するものの末尾を置換したい。正規表現で実現できるでしょうか? 頭に「AN」と付いたら、末尾のカンマを1つ削除というような置換を行いたいと 思っています。 例: AN,,,,,,, ↓ AN,,,,,, にしたい。 頭の文字以降はランダムで、末尾にカンマということだけは同じです。 ランダムなので、普通にメモ帳で置換ということは出来なさそうですし、 サクラエディタなどで正規表現を使ってあげたらいけるのかなと思ってるのですが、 疎いのでどうしたら良いかわからず困っております。 ご教授いただけないでしょうか?

  • 正規表現の使い方をお教えください

    サクラエディターを使っています。    正規表現の使い方の勉強中ですWEBも参考させていただいているのですが    下記のようなテキストがあるとき空白2行以上あるときこれを1行にしたいのです コヒノール 芯ホルダー4301 木製軸 2.5mm・2mm芯ホルダー KOH2ミリ芯ホルダー5216黒軸 木製軸でないものもある 木軸ショート/2.5ミリ芯    宜しくお願い致します。