• ベストアンサー

URLの部分だけを取り出したい(正規表現)

恐れ入ります。 正規表現でURL抜き出しに困っています。 以前ここで教えてもらって$url=~m|http://(.*)[^\S]+|の様にしていたのですが、 次の場合うまくいかないことがわかりました。 $url='<a href="http://www.yahoo.co.jp" target="_blank">http://www.yahoo.co.jp</a>'; $url=~m|http://(.*)[^\S]+| $&に http://www.yahoo.co.jp" とはいっていることがわかりました。 「半角・全角空白、もしくは、" まで」 という判定にしたいです。 どのように書いたらいいのでしょうか・ または、と調べると (s1|s2|...) と書いてあったので [(^\S|\")] とやってみたのですが、エラーになりました・・・

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> $url=~m|​http://[a-zA-Z0-9​ \.\&\%\$\#\!\(\)\-\+\?\/]+|; > でいいよって回答してくれた方がいたのですが、 > なぜか消えてます・・・ ああ、確かに見覚えありますね。 ただ、このパターンはブラケットの中身をエスケープしすぎです。 過剰にエスケープしても実害はありませんが、 見づらいのでわたしは好きません。 エスケープが必須なのは $と@ → Perl の変数 interpolationに引っかかる / → delimiterに /を使っていなければエスケープなしでもOK ^ - ] → ブラケット対の中での置き場所によっては エスケープ不要にできる

azicyan
質問者

お礼

本当に難しいですね・・・ ご回答感謝いたします。 今後も参考にさせていただきます!

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

このあたりを参考に。 http://www.din.or.jp/~ohzaki/perl.htm#httpURL

azicyan
質問者

お礼

検索すると結構引っ掛かりますよね。 とても難しいです。 1冊本を買ってこようと思います ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

a タグの href 属性のことを考えると, 「最後が "」の他に「最後が '」も考慮する必要があるんじゃないかなぁ?

azicyan
質問者

お礼

$url=~m|http://[a-zA-Z0-9\.\&\%\$\#\!\(\)\-\+\?\/]+|; でやったら大丈夫でした! 忠告ありがとうございました!

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> 「半角・全角空白、もしくは、" まで」 Perlのバージョン、設定で全角空白を一文字として 見てくれるなら http://[^  "]+ もしバイトごとにしか見られないのなら ブラケット中は半角空白+全角空白+クォートです。 http://[^ "]+(?= ) ↑ブラケットの中が半角空白、後ろのカッコの中が全角空白です。 あたりでどうでしょうか? > または、と調べると > (s1|s2|...) > と書いてあったので > [(^\S|\")] >とやってみたのですが、エラーになりました・・・ 「文字クラス」あたりの説明もあわせて読んでください。 ブラケットの中は文字の意味が違います。

azicyan
質問者

補足

?!?!? おひとり $url=~m|http://[a-zA-Z0-9\.\&\%\$\#\!\(\)\-\+\?\/]+|; でいいよって回答してくれた方がいたのですが、 なぜか消えてます・・・ ??????レスもしたんですが・・・・・

関連するQ&A