• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:秀丸の正規表現)

秀丸の正規表現でメールアドレスを取得できない理由

このQ&Aのポイント
  • 秀丸の正規表現でメールアドレスを取得する方法について解説します。
  • 秀丸エディタを使用してメールアドレスを検索する際、キャプチャが正しく動作しない理由について考えてみます。
  • 正規表現の置換でメールアドレスのみを取得できない理由について説明します。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

*とか+等は、複数の候補がある場合、できるだけ長く採用しようとします。 これを、「最長一致」とか「貪欲(greedy)なマッチ」とか言います。 http://www.shuiren.org/chuden/teach/hidemaru/seiki/index-j.html#chuui そのサイトにある > wa_ta_si01@becky_dearie_jp もしくは wa_ta_si02@becky_dearie_jp よ。 が > 2@becky_dearie_jp, になってしまうのは、最初の.*がなるべく長くなるようにマッチするためで .* → wa_ta_si01@becky_dearie_jp もしくは wa_ta_si0 ([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+) → 2@becky_dearie_jp → \1 となるためです。 最近の秀丸では、「ものぐさ」なマッチが使えます。 http://hide.maruo.co.jp/software/hidemaru7/reg.html http://www.shuiren.org/chuden/teach/hidemaru/seiki/03.htm#monogusa .*?([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* とすると (先頭の).*? → (先頭の空白) ([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+) → wa_ta_si01@becky_dearie_jp → \1 となり、メールアドレスを取り出すことができます。 しかし、今度は、その後につづく表現が ([^a-z0-9@\.\-\_]+) → もしくは (末尾の).* → wa_ta_si02@becky_dearie_jp よ。 となってしまい、 wa_ta_si02@becky_dearie_jp を抽出することができなくなります。 いろいろと駆使すればできなくは無いでしょうが、とても複雑な表現になります。 それよりは、そのサイトの後半にあるように、処理を分けた方が簡単でしょう。 ※ なお、そのサイトも例をそのままここに書くと、メールアドレスだと判定されてしまうので、変更しています。

mellow91
質問者

お礼

なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!

その他の回答 (1)

回答No.1

元々メールアドレスの記載がない行は、検索にヒットしていません 検索にヒットしていなければ、当然置換はできませんよね 置換は、検索にヒットした部分に関して置き換えをするのですから ([^a-z0-9@\.\-\_]+) が付いているので、直前の改行はヒットして、削除されているのですが

mellow91
質問者

お礼

なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!