2

次のようにフォーマットされたドメイン名の配列があります。

www.example.com
www.example.co.uk

そこからトップレベルTLDを抽出したいと思います。これにより、(それぞれ)次のようになります。

com
uk

PHPでこれを行うために、正規表現を使用しています。

preg_match("`(?<=\.)\w+$`", $cc, $tld_array);

.これは、文字列の最後までのドメインの最後に一致することを意味します。私はこれが私に与えることを期待していました

com
uk

上記と同じですが、代わりに受信しただけです

NULL
uk

第2レベルのTLDが機能しているのに、第1レベルのTLDが機能していない理由を誰かが理解できますか?

RegExrは、それらも同様にすべきであると提案しています:http://regexr.com? 31gsg

4

4 に答える 4

16

すべてに正規表現を使用する必要はありません:-)良い代替手段:

echo substr($domain, strrpos($domain, ".")+1);
于 2012-07-12T10:56:31.433 に答える
0

正規表現なしでこれを実行したい場合は、http://php.net/manual/en/function.parse-url.phpでphpのparse_url関数を使用することをお勧めします

例(これはphp.netでも見つけることができます):

$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url, PHP_URL_HOST));
于 2016-04-13T15:52:46.130 に答える
0

「www.example.co.uk」から「uk」のみを抽出する必要がある場合は、文字列関数を使用したソリューションが非常に適しています。ただし、実際のTLDを抽出するための正しい方法ではありません。たとえば、「www.example.co.uk」のTLDは「uk」ではなく「co.uk」です。

パブリックサフィックスリストを使用するパッケージが必要です。この方法でのみ、2、3レベルのTLD(co.uk、a.bg、b.bgなど)でドメインを正しく抽出できます。TLDExtractの使用をお勧めします

ここにコードの例があります:

$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('www.example.co.uk');
$result->getSuffix(); // will return (string) 'co.uk'
于 2016-06-22T10:07:42.530 に答える
-1

コメントはこれでは機能しないため、ここに投稿します。

php > $cc = 'www.example.com';
php > preg_match("`(?<=\.)\w+$`", $cc, $tld_array);
php > print_r($tld_array);
Array
(
    [0] => com
)

これがうまくいかない場合は、example.com文字列に印刷できない文字が隠れていないことを確認してください。

于 2012-07-12T10:38:39.007 に答える