• ベストアンサー
  • 暇なときにでも

秀丸の正規表現

秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数440
  • ありがとう数2

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

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

*とか+等は、複数の候補がある場合、できるだけ長く採用しようとします。 これを、「最長一致」とか「貪欲(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 を抽出することができなくなります。 いろいろと駆使すればできなくは無いでしょうが、とても複雑な表現になります。 それよりは、そのサイトの後半にあるように、処理を分けた方が簡単でしょう。 ※ なお、そのサイトも例をそのままここに書くと、メールアドレスだと判定されてしまうので、変更しています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 秀丸での正規表現:複雑な条件を指定する場合

    秀丸エディタの強調表示設定を正規表現を使用して使用しています。 [a-zA-Z][a-zA-Z0-9_]+\s+[a-zA-Z][a-zA-Z0-9_]+ という正規表現でマッチさせたいのですが、else if というケースでもヒットすると思います。これを例外としてマッチさせたくない場合、どういった記述になるのかが思いつきません。直接的な答えでなくてもいいので、何か解法のヒントなどありましたらご指南いただけませんでしょうか。 よろしくお願いいたします

  • 秀丸の正規表現はどの流派に属しているのですか?

    秀丸エディタ64 (バージョン8.20)を使用しています。 秀丸の正規表現は、どういった流派(?)の流れを汲んでいるのでしょうか?よく、○○互換の正規表現という言葉がありますよね。Perl互換、.NET互換など、、、Java、C、そのほかの言語/プラットフォームで秀丸の正規表現に最も近いのは何でしょうか、教えてください。

  • (秀丸)正規表現で、""をマッチさせるには?

    お世話になります。 以下2行に、それぞれマッチさせて、 末尾の""(ダブルコーティション)を外して置換えしたいです。 1-234,漢字,ABC,123円,"789" 1-234,漢字,ABC,"1,234円","789" 秀丸の正規表現 検索  ^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),"((.?)*)"$ 置換  \1,\2,\3,\4,\5 で試したところ、 1-234,漢字,ABC,123円,"789" では、マッチして、 1-234,漢字,ABC,123円,789 と置換されて結果OKでした。 しかし、 1-234,漢字,ABC,"1,234円","789" の方ではマッチしませんでした。 そこで質問させていただきますが、 1-234,漢字,ABC,"1,234円","789" でマッチするようにする為には、 上記しました秀丸の正規表現(検索)を、 どのように変更すればよろしかったでしょうか? 以上になります。 宜しくお願いいたします。

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • メールアドレスの正規表現

    メールアドレスの正規表現 正規表現の勉強をしています。下記のURLのメールアドレスの正規表現の一部が理解できません。 http://hodade.adam.ne.jp/seiki/page.php?s_mail ^[a-zA-Z0-9!$&*.=^`|~#%'+\/?_{}-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ この中の「[a-zA-Z]{2,4}$」の部分がわかりません。 行末が英文字2以上4以下というのは何を表しているのでしょうか? なぜ2以上4以下になるかが理解できません・・・ 宜しくお願いします!!

  • 正規表現の仕様について

    "abcdefg"という文字列に対して、/a(bc|bcd)/ という正規表現で検索すると 秀丸エディタの正規表現検索では、"abcd"がマッチし、 スクリプト言語のrubyでは"abc"がマッチします。 これは使用している正規表現ライブラリで演算子'|'の評価の仕方が異なるのだと思うのですが、統一された仕様のようなものは存在しないのでしょうか? 他の正規表現ライブラリ間でもこのような細かな動作の違いというのは存在するのでしょうか?

  • 秀丸 正規表現 \z

    あるフォルダに空のファイルがいくつかあって、それをgrepを使ってファイルの一覧を取得したいのです。 空のファイルは、[EOF]とだけ入っている状態なので、 正規表現の「\z」で抽出出来そうな感じですけど、駄目でした。 マクロを使わないで、正規表現だけで、ファイルの一覧を取得出来るのでしょうか? 秀丸初心者ですが、宜しくお願いします。

  • (秀丸)正規表現で、変数¥1内より、""のみ削除

    お世話になります。 秀丸エディタの正規表現で、 変数¥1内に、取得した文字列値が、 "1,234" だった場合、 その変数値より、""(ダブルコーティション)のみを削除して、 変数¥1内に、 1,234 として、セットし直したいです。 そこでご質問させていただきますが、 既存の変数¥1内に取得する為の正規表現のところに対して、 さらに、 どのように正規表現を追記すれば、 上記しましたように、 変数¥1内に、 1,234 として、セットし直すことが出来ますでしょうか? 以上になります。 宜しくお願いいたします。

  • 秀丸の正規表現について

    下記のような並びを、 秀丸の正規表現で、4文字ずつ折り曲げたいのですがどのようにすればよいでしょうか? 分かる方、教えていただけないでしょうか? 宜しくお願い致します。 7 5 6 9 7 4 1 6 9 5 1 2 以下、略 ↓ 7569 7416 9512 以下、略

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

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

  • 秀丸の置換で正規表現を使う方法を教えてください

    お世話になります 秀丸エディタの置換を用いて、 (’.ab12#-cd’)のような文字列や数字、記号のまじった ( )から( )の中身を検索置換して (’’)にしたいと考えています。 具体例 (’.ab12#-cd’) (’.ab#37-c’) (’..ab-82#d%’) (’.12jg+#ppv’) (’.ab12lentext’)から ↓ (’’)に置換したい。 秀丸を使うときはあっても単純な 一文字程度の検索置換しかおこなったことがなく どうにも方法がうかばなかったところ 友人から、正規表現というものを 使えば実現できるようだと聞きました。 友人も残念ながら、プログラミングの経験は あまりなくて正規表現での記述方法は わからないいうことでした。 正規表現を使ってこれを実現する方法を 教えていただけませんでしょうか よろしくお願いいたします

  • 秀丸の正規表現で [ や ] 自体を表現したい

    秀丸の正規表現による検索や置換で [ や ] 自体を使いたいんですがどうすればよいでしょう。 たとえば、配列[i][j][k] ( i , j , k は0~9でいくつかある)などを一気に配列[i][i][i]としたり配列[k][j][i]としたりしたいのです。 よろしくお願いします。

  • 正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。

    正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。 両方とも構文エラーが起きないのでその時点で?ですが .は\.としないと正規表現ではドット文字を認識しないのはわかりますが、正規表現の@はどうすればよいのでしょうか? Perl自体@も配列なので\@つけた方が・・・ よろしくお願いいたします。 $x = "test@example.com"; if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/) if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

    • ベストアンサー
    • Perl
  • 正規表現について VB6

    VB6で正規表現(Microsoft VBScript Regular Expression 5.5を使っているのですが、 (1) No001の場合、001を取得 (2) Noの場合は空文字を取得 したいのですが、どうすればよいのでしょうか? re.Pattern = "^No(.+)$" この場合、(1)の場合、マッチしますが(2)でマッチしません。 正規表現に詳しい方、VB6で正規表現をよく使う方、教えて下さい。