- ベストアンサー
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|\")] とやってみたのですが、エラーになりました・・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> $url=~m|http://[a-zA-Z0-9 \.\&\%\$\#\!\(\)\-\+\?\/]+|; > でいいよって回答してくれた方がいたのですが、 > なぜか消えてます・・・ ああ、確かに見覚えありますね。 ただ、このパターンはブラケットの中身をエスケープしすぎです。 過剰にエスケープしても実害はありませんが、 見づらいのでわたしは好きません。 エスケープが必須なのは $と@ → Perl の変数 interpolationに引っかかる / → delimiterに /を使っていなければエスケープなしでもOK ^ - ] → ブラケット対の中での置き場所によっては エスケープ不要にできる
その他の回答 (3)
- bgbg
- ベストアンサー率53% (94/175)
お礼
検索すると結構引っ掛かりますよね。 とても難しいです。 1冊本を買ってこようと思います ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
a タグの href 属性のことを考えると, 「最後が "」の他に「最後が '」も考慮する必要があるんじゃないかなぁ?
お礼
$url=~m|http://[a-zA-Z0-9\.\&\%\$\#\!\(\)\-\+\?\/]+|; でやったら大丈夫でした! 忠告ありがとうございました!
- sakusaker7
- ベストアンサー率62% (800/1280)
> 「半角・全角空白、もしくは、" まで」 Perlのバージョン、設定で全角空白を一文字として 見てくれるなら http://[^ "]+ もしバイトごとにしか見られないのなら ブラケット中は半角空白+全角空白+クォートです。 http://[^ "]+(?= ) ↑ブラケットの中が半角空白、後ろのカッコの中が全角空白です。 あたりでどうでしょうか? > または、と調べると > (s1|s2|...) > と書いてあったので > [(^\S|\")] >とやってみたのですが、エラーになりました・・・ 「文字クラス」あたりの説明もあわせて読んでください。 ブラケットの中は文字の意味が違います。
補足
?!?!? おひとり $url=~m|http://[a-zA-Z0-9\.\&\%\$\#\!\(\)\-\+\?\/]+|; でいいよって回答してくれた方がいたのですが、 なぜか消えてます・・・ ??????レスもしたんですが・・・・・
お礼
本当に難しいですね・・・ ご回答感謝いたします。 今後も参考にさせていただきます!