URLに含まれる可能性がある文字列は?

このQ&Aのポイント
  • URLに含まれる可能性がある文字列について調査しています。既存の情報では明確な答えが得られなかったため、開発者や詳しい方からの解説を求めています。
  • URLには、A~Zやa~z、0~9、-_.!*'()といった文字が含まれる可能性があります。また、予約語として定義されている文字も使用できますが、ディレクトリ名やファイル名には使用できない場合があります。
  • 一方で、\'`|^"<>)(}{][などの文字はURLに含めることができません。ただし、予約語としても制約されていない文字もあり、この点が混乱の原因となっています。
回答を見る
  • ベストアンサー

URLに含まれる可能性がある文字列は?

こんにちは、よろしくお願いいたします。 ※カテゴリーが分からなかったのでこちらに質問させていただきました。 カテ違いならご指摘下さい。 複数行のテキストファイルの内容からURLを抽出するエクセルVBAを作成しようとしています。 (質問の趣旨はエクセルVBAについてではありません) 各行の内容はURLのみの行、URLが他の文字列に挟まれている行、URLは全く含まれていない行 があります。 URLがハイパーリンクされないようにするため、あるいはURLとなされないようにするために ttpやtpで始まるものは無視してよいです。 「ht tp」や「h ttp」としたものはURLとみなします。(スペースを削除するので問題とならない) 問題となっているのは、httpが含まれると判断した行を「http」で区切った右側のどこまでを URLと看做すか、です。 そこでネット検索してみましたが、「URLで使用できない文字列」というのはいくつか見つかり ましが、たとえば、予約語なのでURLに使用できない文字列は使用できないだけであってURLに は含まれる可能性があります。 「URLに含まれる可能性がある文字列」を調べたいのですがネット検索で見つかった物は明確 に示したものが見つからなかった(検索の仕方が悪かった、あるいは明確に示したものがあって も見方が悪くて見落としていた、というのもあるかと思います)ので開発者や詳しい者でなくて も理解できるように書かれたHPがあれば紹介していただきたいです。直接解説していただくの は大いに歓迎します。 いままでネット検索して見たことがあるページです。 見てもいまいち理解できませんでした。 http://datatracker.ietf.org/doc/rfc3986/ http://datatracker.ietf.org/doc/rfc3986/?include_text=1 http://jbpe.tripod.com/rfcj/rfc2396.ej.sjis.txt http://okwave.jp/qa/q247115.html http://www.ipentec.com/document/document.aspx?page=web-url-invalid-char&culture=ja-jp http://www.ipentec.com/document/document.aspx?page=web-url-invalid-char&culture=ja-jp ↑を見た限りでは、URLに含まれる可能性がある文字列は 問題なく使える文字列 A~Z A~z 0~9 使用可能な文字列 - _ . ! * ' ( ) 予約語として定義されている文字 使用できるがディレクトリ名やファイル名には使用できない ; / ? : @ & = + $ , % ところが、 >URLに含めることのできない文字 >以下の文字はURLに含まれない文字です。 \ ' | ` ^ " < > ) ( } { ] [ と書いてあり、 ) ( は「使用可能な文字列」と「URLに含めることのできない文字」 の両方に書かれており混乱しております。 結局のところ、URLに含まれる可能性がある文字列が把握しきれ ておりません。 ご教示よろしくお願いいたします。

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

  • ベストアンサー
  • sech1152
  • ベストアンサー率72% (45/62)
回答No.1

RFC 3986(日本語訳)「付録 A. URI のために収集された ABNF」 http://www.studyinghttp.net/cgi-bin/rfc.cgi?3986#SecA この中の「"」でくくられた文字が、半角英数以外でURIに使われる可能性のある文字です。 これによると、 -._~%:/?#[]@!$&'()*+,;= らしいです。 ただ、このルールは、主にブラウザがWebサーバとやり取りするときの規則なので、人間が目にするURLには、日本語ドメインや日本語のディレクトリ名・ファイル名など非ASCII文字が含まれる可能性があります。 もちろん、ブラウザがWebサーバにリクエストを出すときは、日本語ドメインならPunycode、それ以外ならURLエンコードで半角英数記号に変換してアクセスしますが、最近のブラウザではアドレスバーには変換前の日本語のまま表示されることがあります。 例えば、アドレスバーに「http://ja.wikipedia.org/wiki/東京」と打ち込んでアクセスすれば、ウィキペディアの東京のページが出てきます。 問題のテキストファイルが、日本語を含んだURLを含んでいると、難しいことになりますね。 URLエンコード(パーセントエンコード)の場合、通常、ユニコードで表現できる文字ならすべて含めることが可能になってしまいます。 そのため、切り出すURLの最初は"http://"を見つければいいですが、終わりはどこまでか分からなくなってしまいます。 (https://やftp://はどうしますか?) 参考に、 正規表現を使って文字列中からURLを抜き出す(VB6.0) http://hanatyan.sakura.ne.jp/patio/read.cgi?no=316 日本語非対応です。 複数のURLが含まれた文字列から、すべてのURLを抜き出すプログラムです。 VBAで文字列がURLとして正しいかどうかを正規表現を使って判断する方法 http://blog.mamohacy.tribrid-jp.com/article/239588337.html 日本語非対応です。 このなかで、https* というのは https? の方がいいと思うのですが・・・。 URLを抽出する正規表現はどう書くべきか http://d.hatena.ne.jp/sutara_lumpur/20100827/1282872312 日本語を受け入れるために、空白文字以外のすべてを受け入れることにしてしまった話。

marbin
質問者

お礼

sech1152さん、ご回答ありがとうございます。 簡単にはいかないのですね。リンクしていただいたHPも参考に もうちょっと勉強してみます。ありがとうございました。

その他の回答 (1)

回答No.2

No.1さんが説明されている通りなのですが、URLに使える文字は RFC3986に書かれていることが一番正しいです。 (RFC2396はRFC3986で改訂されたため無効となったものです。) 他の資料はRFC3986で書かれていることをわかりやすく解説しているだけです。 実際、()文字を使用しているURLはMicrosoftのサイトに存在します。 (例) http://msdn.microsoft.com/ja-jp/library/kk6xf663(v=vs.80).aspx ただ、No.1さんが指摘している通り、URLエンコード(パーセントエンコード) を使用すれば、日本語含めどんな文字もどんな記号もURLに使えます。 逆に、あなたの質問にある「ht tp」や「h ttp」は、明らかにURLの 一部ではありません。なぜならRFC3986にある通り、「http」等の scheme部分に使える文字は、アルファベットか数字か"+"か"-"か"."の いずれかのみであり、スペースもpct-encoded(パーセントエンコード) で表現するスペース文字(%20)もscheme部分には使えないからです。 でも、何か事情があってそれをスペース削除してURLとみなしたいのであれば、 別にそれはそうすればいい話です。 結局、URLに使える文字の一般仕様がどうなのかよりも、 そのテキストファイル独自のURL記述ルールを明確化し、 それに従っている部分をURLとみなせばいいのだと思います。

marbin
質問者

お礼

Lchan0211bさん、ご回答ありがとうございます。 sech1152さんのご回答と合わせ勉強してみます。 ありがとうございました。

関連するQ&A

  • 指定した文字列を含むURLを検索・リスト表示できるソフトを探しています

    指定した文字列(例えば、http://○○○.jp/など)を含むURLを 全て検索し、リスト表示できるフリーソフトを探しています。 知っている方がいましたら、教えて下さい。

  • 文字列検索について

    Windows98の「検索」→「ファイルやフォルダ」の"文字列検索"で.docファイルや.mhtファイルの中身が検索できないのですが、どうしてですか?ご教授お願います。

  • 文字列の検索高速化について

    大容量の文字列から文字列を検索するのに四苦八苦しております。 現在は文字列を構造体→メモリを確保でなんとかやっておりますが、データの容量が大きい為、時間が掛かりすぎてしまいます。 データ 70文字×30000行程度(行数可変)の文字列ファイル(すべて半角英数) 検索する側、検索される側共に同じファイルを使用します。 検索する側から一行ずつ文字列を取得→特定のカラムから文字列を抜き出す→検索される側からヒットした行を抜き出す→別処理を行う (検索に使用した行はスルー、検索される側には検索文字列が複数存在する可能性あり→すべて抜き出したい) また、抜き出した行は検索する側、される側共に次以降二重処理して速度が遅くなってしまうかと思うので、できれば削除したい。(現在は二重処理も致仕方ないとしてそのままやっています) 過去ログを読むとハッシュテーブルが良いかと言われていますが、このような場合はどのようなアルゴリズムが良いのでしょうか。 質問がわかりずらく申し訳ないですが、アドバイスを頂ければと思います。 また、使用方法等が詳しく記載されているページ等がありましたら教えて頂ければ幸いです。

  • メモ帳のURLっぽい文字列を<a></a>挟みたい

    メモ帳などに大量にあるhttp://www.diamondblog.jp/degawablog/やttp://www.diamondblog.jp/degawablog/という文字列を<a href="http://www.diamondblog.jp/degawablog/" target="_blank">http://www.diamondblog.jp/degawablog/</a>というように変換する方法を教えてください。 用途はブログの日記を書く上でリンクを大量に変換する作業を効率的に行うためです。

    • ベストアンサー
    • Java
  • URLの中に含まれる文字列を検索

    タイトルのとおりURLの中に含まれる文字列を検索するにはどのようにすればいいのでしょうか。 例えば、"conference"が含まれているURLを検索した結果、 http://gogoiti.co.jp/conference/other/ http://openelectronic.co.jp/conference/pagepage/ ・ ・ ・ といった風にconferenceが使われているサイト数を知りたいのです。 googleの詳しい検索方法を使えばできるのかと思ったのですが、調べてみたもののたどり着けませんでした。 どなたかご存知の方よろしくお願いします。

  • You Tubeの埋め込みURLが文字列にしかならない

    You Tubeに初めてアクセスしました。 動画をSNSに貼り付けようと思ったのですが、埋め込み枠にあるURLをSNSの 本文に貼り付けても、URLが文字列として表示されるだけで動画がリンクできません。 googleで検索しても、埋め込み枠のURLを貼り付けるだけでよいとしか書かれていませんでした。 何が悪いのでしょうか? WinXP IE6です。よろしくお願いします。

  • ストリング文字列をDocumentオブジェクトに格納したい

    文字列として受け取ったxmlをDocumentオブジェクトに格納したいと考えて DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(ファイルパス); とすればファイルを取得してDocumentオブジェクトに入れることはできたのですが、ファイルパスではなくString文字列としてxmlを受け取った場合、どのようにすればDocumentオブジェクトに格納できるのかわかりません。 どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • 最も多い文字列を検索するには

    皆様いつもお世話になっております。 最も多い文字列を検索するにはどのようにすればよいでしょうか。 具体的には (1)A列に6文字の文字列が並んでいます。 (2)先頭4文字の文字列で最も多い種類の文字列の値を取得する (3)最も多い文字列以外の文字列を含む行を削除する というプログラムを組みたいと思います。 よろしくお願いします。

  • Solaris8でのMIB設定方法

    現在SPARC版Solaris8を使用しております。 質問なのですが、udp_xmit_hiwat,udp_recv_hiwatの上限値を、通常規定されている65536を超えて 設定しなければならず、調べていたらMIB(RFC1323)で解決できそうだと言うところまで判りました。 しかし、それをシステム起動時にどうやってロードさせたらいいのか、どこで設定したらよいのか判りません。 また、MIBも、「IETF(http://www.ietf.cnri.reston.va.us/)」と言うところで ドキュメントは発見(http://www.ietf.cnri.reston.va.us/rfc/rfc1323.txt?number=1323)したので すが、何をサーバ上に置けば良いのか判りません。 すみませんが、ご教授頂けないでしょうか? よろしくお願い致します。

  • ファイルの文字列の処理の質問

    今ファイルに対して文字列の処理をしています。 あるファイルに対して一定の文字列を検索して、その検索したい文字列が なければ、その一行をファイルに出力したいですが、手元にwindowsバージョン のgrep.exe で実現すると考えています。 しかし、検索したいファイルは、文字列が入ってない行があります。 そのため、検索したい文字列が存在しない行は、改行だけの行を結果として 出力されています。改行だけの行を除きたいですが、どうすればいいか? ファイルのsjisです。例えば、内容としては、以下のようになっています。 aiiiiii ballllll fafafa 777777 とするファイルがあります。そのファイルに対して、aという文字が入ってない行を 取りたいですが、実際にgrep -v "a" ファイル名 でやると、777777の行とすべて 改行だけある行が取られてました。 777777だけをとる方法がありますでしょうか?