1

私は別の答えで見つけた何かを試していますが、いくつかの問題があります:

URLの正規表現の方が優れていることは知っていますが、たとえば次のように考えてください。

@links=($content =~ m/(https?)?.*[.]com/g);
*$content has text or html

(https?)?のようなリンク用の部分ですがwww.google.com、元に戻る括弧"http"$1使用して@links!リンク全体が欲しいので、それは問題です。

テキストから単純なリンク(または指定されている正規表現)をグローバルに抽出し、それらをリストに入れるにはどうすればよいでしょうか。
簡単に言うと、次のことを意味します。

  • http://www.google.com
  • www.google.com
  • google.com
  • https://www.google.com
4

2 に答える 2

5

あなたのアプローチはあまりにも素朴で、他の多くのURLをキャッチしません。代わりに、次のようにRegexp::Commonを使用します。

use Regexp::Common qw/URI/;

my @links = ($content =~ /$RE{URI}/g);

これはHTTP、HTTPS、FTPなどで機能し、URLパラメータのより高度な組み合わせを適切にキャプチャします。

于 2012-10-29T00:57:20.647 に答える
3

非キャプチャバージョンは次のようになります。

m/(?:https?)?.*[.]com/g

リンクをキャプチャするために、URI :: Find:から派生したこの正規表現を使用します。

m<https?://[;/\?:\@&=+\$,\[\]A-Za-z0-9\-_.!~*'()%#]*[/\?:\@&=+\$\[A-Za-z0-9\-_!~*(%#]>
于 2012-10-29T02:45:50.420 に答える