0

URLからドメイン名を抽出する方法を知りたい

HTMLファイルにデータがあります:

<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br />

完全なハイパーリンクを取得できます

 preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+".
                    "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/",
                    $var, &$matches);

    $matches = $matches[1];
    $list = array();
sort($matches);

しかし、タグの間にあるとgoogle.com を抽出したいと思います。では、どうすれば抽出できますか?youtube.com<a> and </a>
google.comyoutube.com

4

2 に答える 2

0

私は多くのトラブルを経験した後、自分の正規表現を書きます

<a[^>]*>(.*?)<\/a>

これは動作します

于 2012-04-23T01:56:06.110 に答える
0

リンク テキストを照合するだけでよければ、この正規表現が機能します。

>(.*?)</a>

実際の URL を解析したい場合は、「com」、「net」、「org」などの受け入れ可能な文字列の後のすべてを無視してみてください。これは非常にトリッキーな考えになる可能性があります。ホスト名を一致させたいですか、それとも何ですか?

「youtube.com.site.com」の例については、http: //en.wikipedia.org/wiki/Domain_name#Domain_name_syntaxを参照してください。

URL に簡単にアクセスできる場合は、PHP のparse_url関数も確認してください。


アップデート。href=一重引用符または二重引用符が後に続くURL に一致する正規表現を次に示します。この後は使いやすいはずですparse_url()

<a href=['|"](.*?)?['|"]>

アップデート2. 空白が問題です。私はエレガントな解決策を実行できませんでしたが、これで問題が解決します<br />。もっと効率的な解決策があると確信しています。見つけたら戻ってきます。

$s = '<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br /><a href='http://youtube.com.site.com'>extratube.com</a>';

$pattern = '#>(.*?)</a>(<br />)*#';
preg_match_all($pattern, $s, $result);
var_dump($result);
于 2012-04-21T13:19:51.757 に答える