• ベストアンサー

正規表現でURLだけを取り出したい

正規表現でURLだけを取り出したいのですが、うまくできなくて困っています。 あああああ http://www.yahoo.co.jp abcdefg if ($_=~/(.*)http(.*)[  \n](.*)/){ print $2 } とやると http://www.yahoo.co.jp abcdefg となってしまいます。 http://www.yahoo.co.jp だけを取りたいのですが・・・ []のなかは 半角スペース、全角スペース、改行 です。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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 どこに不具合が? スクリプトと具体例を示してください。

azicyan
質問者

お礼

申し訳ありませんでした。 マッチは出来ていたようです。 違うところで不具合でした。 実はURLを変換させたかったのですが、 $henkan=~ s/$&/$url$data$b.html/; のようにすると、 $&に?が含まれる場合のみ置換が出来ないようです。

azicyan
質問者

補足

すみません steel_grayさんの方法をとっていました。 同じような感じに見えるのですが、 やはりsteel_grayさんのほうほうだと http://www.yahoo.co.jp/mmm.cgi?p=t​ はマッチしません。 ?をとるとマッチします。 何がおかしいのでしょうか・・・

その他の回答 (3)

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

#1です。 すみません [\S]→ [\S]+ です。 \Sは\sでないものの集合ですので、\sの complementを取るのならこっちの方が良いかと。

azicyan
質問者

補足

たびたび畏れ入ります。 うまく行ったと思ったのに、 urlに?ガ含まれると マッチしなくなります・・・

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

半角スペース、全角スペース、改行 は「\s(空白文字)」というメタ文字で表わせます。 $str = 'あああああ http://www.yahoo.co.jp nabcdefg'; if ($str=~m|http://[^\s]+|){ print $&;#$&は正規表現マッチした文字列全体が格納される。 } もうちょっとマジメに考えるなら http://www.din.or.jp/~ohzaki/perl.htm#URI こちらが参考になります。

azicyan
質問者

補足

うまくいきましたーーー とおもったのですが、 URLに?があるとマッチしなくなってしまうようです。 ?マークはcgiなどで、 引数を渡しているばあいです・・・

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

$_に検索対象の文字列があるとして、 ($uri) = m{(http://[\S])}; とか。 ブラケットの中身は適当に調節してください。

azicyan
質問者

お礼

早速やってみます。 取り急ぎお礼まで!

azicyan
質問者

補足

($uri)=m{(http://[\S])}; print "uri:::::: $uri\n;"; とやったところ uri:::::: http://w と出てきました・・・・