0

いくつかのURLを含むテキストを取得しています。テキストで指定されたURLに存在するホストのリストを抽出したいと思います。例えば:

入力:

www.jenniferlopezonline.com www.jenniferlopez.com www.twitter.com/jlo www.myspace.com/jenniferlopez www.youtube.com/jenniferlopez

必要な出力:

Array(
[0]=>www.jenniferlopezonline.com
[1]=>www.jenniferlopez.com
[2]=>www.twitter.com
[3]=>www.myspace.com
[4]=>www.youtube.com
);

私はこのコードを試しました:

preg_match_all('/([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)/i',$text,$matches);
print_r($matches);

出力は次のようになります。

Array
(
[0] => Array
(
[0] => www.jenniferlopezonline.com
[1] => www.jenniferlopez.com
[2] => www.twitter.com
[3] => www.myspace.com
[4] => www.youtube.com
)

[1] => Array
(
[0] => www.jenniferlopezonline.com
[1] => www.jenniferlopez.com
[2] => www.twitter.com
[3] => www.myspace.com
[4] => www.youtube.com
)

[2] => Array
(
[0] => .
[1] => .
[2] => .
[3] => .
[4] => .
)
);

この出力を目的の出力に変換すると、コードがさらにコストがかかり、プロセスが遅くなります。データをまとめて取得するので、余裕がありません。

4

2 に答える 2

0

不要な括弧を削除するだけです。それらは、最初に追加のアレイを生成するグループをキャプチャしています(そしてエンジンの高価なもの):

preg_match_all('/[a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+/i',$text,$matches);

$matches[0]これにより、すぐにではなく、で目的の配列が得られますが、$matchesその動作を変更することはできません。さらに、これにより、計算のオーバーヘッドが大幅に節約されます。に割り当てる$matches[0]こと$arrayは、おそらく比較的無視できます。

于 2012-11-10T22:28:49.037 に答える
0

parse_url()URL のコンポーネントの連想配列を取得する方法を試すこともできます。

例えば:

$parts = parse_url('http://twitter.com/jlo');
echo $parts['host'];

印刷しますtwitter.com

http://URL にスキームが含まれていることを確認してください。

于 2012-11-10T22:48:22.697 に答える