Perl正規表現を使用して特定の拡張子(通常は可変サブドメイン)のすべてのURLをプレーンテキストから抽出するにはどうすればよいですか?私が試してみました:regexを使ってPerlでプレーンテキストからURLを抽出する
my $stuff = 'omg http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif dfgdfg http://shomepage.com/woot.gif aaa';
while($stuff =~ m/(http\:\/\/.*?homepage.com\/.*?\.gif)/gmsi)
{
print $1."\n";
}
をそれは恐ろしく失敗し、私を与える:
http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif
http://shomepage.com/woot.gif
私は.*?
を使用していますので、それはどの非貪欲ことが、私に最小を与えるべき、起こらないだろうと思いました一致。誰かが私が間違っていることを教えてもらえますか? (私はURLを検証するためにいくつかのユーバーコンプレックス、缶詰正規表現を望んでいない。私は私が間違っているのかを知りたいので、私はそれから学ぶことができます)
[RFC 3986付録C](のhttp:/ /tools.ietf.org/html/rfc3986#appendix-C)では、空白が許されている場合を含め、URIを抽出する際の特別な問題について説明しています。 "いくつかのケースでは、長いURIを改行するために空白(空白、改行、タブなど)を追加する必要があり、URIを抽出するときに空白を無視する必要があります。そして、「堅牢性のために、ユーザー型のURIを受け入れるソフトウェアは区切り文字と埋め込み空白の両方を認識して削除するようにしなければなりません。それは経験から言うと、これは難しいです。 – Schwern