人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

メールアドレスが多数含まれた英文があるとします。

このうちメールアドレスのピリオドだけシャープ3つ(###)に置換するには、
正規表現でどのように表現すれば良いでしょうか?

例:
<原文>
This is my E-mail address.
"hello.goodbye@yahoo.co.jp"
thank you.

<置換後>
This is my E-mail address.
"hello###goodbye@yahoo###co###jp"
thank you.


●質問者: tetlis
●カテゴリ:コンピュータ インターネット
✍キーワード:co.jp E-MAIL Hello JP Yahoo
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● foobar_777
●0ポイント

メールアドレス中の.は2個以上はないとすると以下のような感じでしょうか。

>echo hello.goobye@hoge.co.jp|sed -n "s/\.\([a-zA-Z0-9_-]*@\)/###\1/gp"

hello###goobye@hoge.co.jp

http://www.mnet.ne.jp/~nakama/

◎質問者からの返答

2個以上ある時もありますし、@マーク以降についても置換が必要です。


2 ● takepierrot
●54ポイント ベストアンサー

ちょっと面倒かもしれませんが、僕ならこのように行います。

(秀丸エディタ使用)

▼1回目の置換

「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

([^\.]+)\.([^\.]*)(?=@)

・置換文字

\1###\2

▼2回目の置換

こちらも1回目と同じように、「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

(?<=@)([^\.]*)\.([^\.]+)

・置換文字

\1###\2

以上で一応目的は達成できるかと思います。もっと上手な方法もあるかとは思いますが、ご参考になればよろしいかと…。

URLはダミーです。

http://q.hatena.ne.jp/

◎質問者からの返答

やはり、一度に一つのピリオドを置換し、それができなくなるまで繰り返す、

ということになるのですね。

ありがとうございます。


3 ● y-kawaz
●26ポイント

純粋な正規表現のみで表現するのは挫折しました…。

以下では@の左側と右側の2回に分けて置換しています。また@の右側は一回では置換しきれないためマッチする限り複数回置換を行っています。

#!/usr/bin/perl
$s='This is my E-mail address.
"hello.good.bye@yahoo.co.jp"
thank you.';

# @の左側のピリオドを置換
$s =~ s/\.(?=[a-z0-9_=\+\.-]*\@[a-z0-9\.-]+)/###/gi;

# @の右側のピリオドを置換
while($s =~ s/(\@[a-z0-9\.\-]+)\.(?=[a-z0-9\.\-])/$1###/i){}

print "$s\n";

↓出力結果

This is my E-mail address.
"hello###good###bye@yahoo###co###jp"
thank you.

http://q.hatena.ne.jp/answer

◎質問者からの返答

メールアドレスの仕様を知らないのですが、@の左側もwhileしないといけないかな、

と思いました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ