• ベストアンサー

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|\")] とやってみたのですが、エラーになりました・・・

  • Perl
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • 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

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

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

    • ベストアンサー
    • Perl
  • VBで正規表現

    VBで正規表現 下記のような文字列がTextBoxに入力されています。 <a></a>で囲まれた部分の抽出は出来ましたが、 <td></td>タグで囲まれた’18’も取り出したいのですが正規表現ではどの様に記述すれば宜しいでしょうか? 関係有りそうなコードはこれです。 Regex("<a href=""(?<url>.*?)"".*?>(?<text>.*?)</a>" ---------------------------------------- <TR bgcolor=#ffffff> <TD> 18 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=11379753" target="_blank"> 11379753 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=16190&t=wus&bg=3" target="_blank"> 16190 </a> </TD> </TR> ----------------------------------------

  • 正規表現でタグからURLを取り出したい

    こんにちは。 <a href="http://www.x**.com/test/product.php?id=1111&pid=2222&hid=3333&oid=4444" TARGET=_blank> <img border="0" src="http://Y**.com/include/implession.php?pid=2222&hid=3333&flag1=product&id=1111&oid=4444" alt="テスト<BR>正規表現" width="100" height="75"></a> などというタグから リンク先のURLからhttp://をとったもの(ここでは、www.x**.com/test/product.php?id=1111&pid=2222&hid=3333&oid=4444) と ソースURL(ここでは、http://Y**.com/include/implession.php?pid=2222&hid=3333&flag1=product&id=1111&oid=4444) を求めたいんですが、 どのように書けばいいのかわからなくて困っています。 どなたかわかりましたら、ご教授お願いいたします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=909227 を参考にしてみましたが、この方法だと、TARGET=_blankなども入ってしまいます。

    • ベストアンサー
    • PHP
  • 正規表現(urlをリンクさせる)

    $comment = "http://www.yahoo.co.jpとhttp://www.google.co.jp/"; $comment =~ s/(http\:\/\/[a-zA-Z0-9\.\$\,\;\:\&\=\?\!\*\~\@\#\_\(\)\%\+\-\/]*)/<a href=\1>\1<\/a>/mg; 上の文字列では下記の様に置換されるのですが問題ないのですが <a href=http://www.yahoo.co.jp>http://www.yahoo.co.jp</a>と<a href=http://www.google.co.jp/>http://www.google.co.jp/</a> コメントが  $comment ="http://www.yahoo.co.jp&lt;br&gt;http://www.google.co.jp/"; だと <a href=http://www.yahoo.co.jp&lt;br&gt;http://www.google.co.jp/>http://www.yahoo.co.jp&lt;br&gt;http://www.google.co.jp/</a> のように置換されてしまいます。 下記の様に置換する正規表現を教えてください。 <a href=htt://http://www.yahoo.co.jp>http://www.yahoo.co.jp</a>&lt;br&gt;<a href=http://www.google.co.jp/>http://www.google.co.jp/</a>

    • ベストアンサー
    • Perl
  • JavaScriptの正規表現の全角スラッシュと空白

    こんばんわ。調べましたがわからなかったので質問させて下さい。 JavaScriptの正規表現の全角スラッシュと空白の表現はどうやってしたらよいのか分かりません。 半角スラッシュは、バックスラッシュの後「/」とやれば出来るのですが、全角スラッシュだと出来ません。 また空白の表現の仕方も分かりません。バックスラッシュの後「S」とやる以外になにか表現方法はありますか?

  • 正規表現について

    すみませんが、教えてください。 PHP+MYSQLで掲示板のようなサイトを作っています。 投稿したコメントの中にURLがある場合、次の変換で、リンクを設定するようにしています。 $str = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $aStr); さらに、次のことがしたいのですが、どうすれば良いのか教えてください。 (1)URLが長い場合、表示する文字列を指定文字数でカットする。 (2)URLのみをリンク設定付で切り出す。 当方、正規表現がほとんど理解できていません。 (オイラリーの本を買ったのですが、時間がなくて学習できていません。) 申し訳ございませんが、こうすれば良いというコードを教えていただければ、幸いです。

    • ベストアンサー
    • PHP
  • 正規表現での空白文字チェックについて。

    VB2005環境です。 正規表現を用いて、以下の3パターンのチェックをしたいと 思っています。 A.半角のみカナ許可(半角スペースも許可) B.全角のみカナ許可(全角スペース許可) C.全角&半角カナのみ許可(スペース許可) Cのパターンは^[ァ-ヶ\uFF61-\uFF9F\s]+$のように 記述してみましたが、\sでは全角、半角問わずに スペースであればよしとしてしまうようで、A、Bの パターンが実現できません。 探してみた限り、半角全角スペースを区別する正規表現が 見つからなかったのですが、そのような表現がありましたら ご教授いただけないでしょうか?

  • 秀丸を利用して、空白から空白の間で、正規表現を使う

    秀丸を利用して、空白から空白の間で、正規表現を使いたいのですが、 やりかたが分かりません。 ^半角スペース.+?半角スペース と思ったのですが、違いました。 正規表現を使いたいところは、 こんな感じになってます。 謎の空白 半角空白 文字列 謎の空白 半角空白 (行頭からここの文字列の前だけ切りたい)  謎の空白 半角空白 文字列 謎の空白 半角空白 (行頭からここの文字列の前だけ切りたい)          : てっきり、全角空白かと思い、記号表示させてみたけど、違いました。 次に、タブかな、と思い、記号表示させてみたけど、違いました。 空白って、全角と半角とタブしか思いつかないのですが、 それ以外に何かあるのでしょうか? また、それは、正規表現で、どう扱うのでしょうか?

  • タグの中の改行文字を正規表現で削除したい

    たとえば、 <a href="~" target="_blank"> というタグの中の改行文字(\n)を削除する正規表現を教えてください。 ただし、preg_replace_callbackは使わないでください。

    • 締切済み
    • PHP
  • 正規表現での置換方法

    http://www.google.co.jp/aaaaa?a=1 上記のようなURLがあった時に、 <a href="http://www.google.co.jp/aaaaa?a=1" >http://www.google.co.jp/aaaaa?a=1</a> と置き換えたいのですが、正規表現とpreg_replaceで表現する場合どうしたら良いでしょうか? a=1 の後に </a>を付ける条件は半角スペースor改行を条件にしたいので (\s|\n)のようにすると思うのですが、どう表現したら良いでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう