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

正規表現でURLをリンクさせる方法と注意点

このQ&Aのポイント
  • 正規表現を使用してURLをリンクさせる方法について紹介します。特定のパターンを検索し、対応するHTMLタグを追加することで実現できます。
  • ただし、正規表現のパターンによっては予期しない結果が生じることがあります。特にURL内に特殊文字が含まれる場合には注意が必要です。
  • 例えば、特殊文字が含まれるURLを正しくリンクさせるためには、正規表現のパターンを適切に設定する必要があります。

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

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

「&lt;br&gt;」は半角文字でしょうか? 全角文字なら問題なくできるのですが。 半角なら、タグがサニタイズされているわけですね。 とすると、URLのリンクを作る前にサニタイズされた文字をURLに含まれない文字でエスケープすればうまくいくと思います。 たとえば中括弧"{","}"はURLには含まれない文字なので・・・ ------------------------------------------------- # "&○○;"を"{&○○;}"に置換する $comment =~ s/(&[#a-zA-Z0-9]*;)/{\1}/mg; # URLリンク $comment =~ s/(http\:\/\/[a-zA-Z0-9\.\$\,\;\:\&\=\?\!\*\~\@\#\_\(\)\%\+\-\/]*)/<a href=\1>\1<\/a>/mg; # "{&○○;}"を元に戻す $comment =~ s/\{(&[#a-zA-Z0-9]*;)\}/\1/mg; ------------------------------------------------- これで期待通りにURLリンクができます。 ただし、URL中に"&○○;"という文字が含まれる場合、うまく動きません。それだけは注意してください(普通"&"も";"もURLエンコードされるのでそんな自体は滅多にないと思いますが・・・)。

meikenpochi
質問者

お礼

twinkleluzさん、回答ありがとうございました。 $comment =~ s/&lt;/{&lt;}/mg; $comment =~ s/(http\:\/\/[a-zA-Z0-9\.\$\,\;\:\&\=\?\!\*\~\@\#\_\(\)\%\+\-\/]*)/<a href=\1>\1<\/a>/mg; $comment =~ s/{&lt;}/&lt;/mg; URLの中に&lt;や&gt;の文字は含まれないと思うので問題ないです。ありがとうございました。 Gooもhttp://の後の<がURLの一部としてリンクされちゃうみたいですね。 http://www.yahoo.co.jp</a> http://www.yahoo.co.jp全角

すると、全ての回答が全文表示されます。

関連するQ&A