- ベストアンサー
正規表現でURLだけを取り出したい
正規表現でURLだけを取り出したいのですが、うまくできなくて困っています。 あああああ http://www.yahoo.co.jp abcdefg if ($_=~/(.*)http(.*)[ \n](.*)/){ print $2 } とやると http://www.yahoo.co.jp abcdefg となってしまいます。 http://www.yahoo.co.jp だけを取りたいのですが・・・ []のなかは 半角スペース、全角スペース、改行 です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> urlに?ガ含まれると > マッチしなくなります・・・ $_ = "あああああ ?http://www.yahoo.co.jp/mmm.cgi?p=t bcdefg mogemoge"; my ($uri) = m{(http://[\S]+)}; print $uri; 結果: http://www.yahoo.co.jp/mmm.cgi?p=t どこに不具合が? スクリプトと具体例を示してください。
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
#1です。 すみません [\S]→ [\S]+ です。 \Sは\sでないものの集合ですので、\sの complementを取るのならこっちの方が良いかと。
補足
たびたび畏れ入ります。 うまく行ったと思ったのに、 urlに?ガ含まれると マッチしなくなります・・・
- steel_gray
- ベストアンサー率66% (1052/1578)
半角スペース、全角スペース、改行 は「\s(空白文字)」というメタ文字で表わせます。 $str = 'あああああ http://www.yahoo.co.jp nabcdefg'; if ($str=~m|http://[^\s]+|){ print $&;#$&は正規表現マッチした文字列全体が格納される。 } もうちょっとマジメに考えるなら http://www.din.or.jp/~ohzaki/perl.htm#URI こちらが参考になります。
補足
うまくいきましたーーー とおもったのですが、 URLに?があるとマッチしなくなってしまうようです。 ?マークはcgiなどで、 引数を渡しているばあいです・・・
- sakusaker7
- ベストアンサー率62% (800/1280)
$_に検索対象の文字列があるとして、 ($uri) = m{(http://[\S])}; とか。 ブラケットの中身は適当に調節してください。
お礼
早速やってみます。 取り急ぎお礼まで!
補足
($uri)=m{(http://[\S])}; print "uri:::::: $uri\n;"; とやったところ uri:::::: http://w と出てきました・・・・
お礼
申し訳ありませんでした。 マッチは出来ていたようです。 違うところで不具合でした。 実はURLを変換させたかったのですが、 $henkan=~ s/$&/$url$data$b.html/; のようにすると、 $&に?が含まれる場合のみ置換が出来ないようです。
補足
すみません steel_grayさんの方法をとっていました。 同じような感じに見えるのですが、 やはりsteel_grayさんのほうほうだと http://www.yahoo.co.jp/mmm.cgi?p=t はマッチしません。 ?をとるとマッチします。 何がおかしいのでしょうか・・・