- ベストアンサー
効率良くURLを拾う正規表現
掲示板に投稿された文章から、効率良くURL(Email add含む)を拾い、<a>タグを仕込むには、置換処理の中でどのように正規表現を組むのが安全かつ効率的ですか? 例: 私のHPはhttp://www.hoge.com/です。 お問い合わせはhoge@hoge.comまで。 ↓ 私のHPは<a href="http://www.hoge.com/">http://www.hoge.com/</a>です。 お問い合わせは<a href="mailto:hoge@hoge.com">hoge@hoge.com</a>まで。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
http や、ftp の正規表現は、下記のようなものが あります。 $value =~ s/(http|ftp)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig; もしくは $value =~ s/((http|ftp):\/\/[\w\$\#\~\.\/\-\?\=\&\:\%]+)/<a href\=\"$1\" target\=\"\_blank\">$1<\/a>/g unless $value=~/</i; ですが、メールアドレスの正規表現については 判別が非常に困難な部分があるようです。 一応コードはのっていますが、参考URLを参照してみて 下さい。
その他の回答 (3)
- shigatsu
- ベストアンサー率26% (511/1924)
メールアドレスの場合は、やはり@マークでしょうね。 @マークの前後にメールアドレスとして使用可能な文字列を探していく方法が良いんじゃないでしょうか?
補足
ですよね。 メールアドレスで使える文字って、決まりはあるんでしょうか?
なんか、ymdaさんのおっしゃってるのを見ると可能なようですね。 俺の場合、基本的に正規表現が嫌いなので(ルールが難しすぎる、他人のソースを見たとき見にくい、などの理由から)、簡単な置き換えくらいにしか使いませんが、正規表現を使うのであれば、ymdaさんのソースでいいのではないでしょうか。 一般にメールアドレスでは、アカウント部では数字とアルファベットと「-(ハイフン)」が使え、サーバー名の部分はさらに「.(ピリオド)」を使えるようにしているようです。
もしかしたら可能なのかも知れませんが、通常は「http://」から始まる文字列を探し出してきて、URLとして使用可能な文字までをアドレスとして認識するようにプログラムした方が効率的だと思います。
補足
早速回答頂きありがとうございます。 頭部分としては http:// https:// に対応したいのと、 Email address へも対応したいと思っています。 また、「URLとして使用可能な文字」とは実際に何があるのでしょうか? また私自身、正規表現をうまく書くノウハウが少ないので、これらの要件を満たす正規表現を伺いたかったのです。 よろしくお願いします。
お礼
ありがとうございます。 試したところ、完璧でした! またよろしくお願いします。