

[http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-EeeBook-X205TA-
WHITE10-Windows10-11-6%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89/dp/B015DTB87Q/ref=sr_1_1?s=computers&ie=UTF8&qid=1460353489&sr=1-1&keywords=%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3](http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-EeeBook-X205TA-
WHITE10-Windows10-11-6%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89/dp/B015DTB87Q/ref=sr_1_1?s=computers&ie=UTF8&qid=1460353489&sr=1-1&keywords=%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3)

上記のURLを下記のようにするには、どのような正規表現？を書くべきでしょうか？  
URLのドメイン以外は可変の値です。  
詳しい方、ご教示ください。よろしくお願いいたします。

<http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-EeeBook-X205TA-
WHITE10-Windows10-11-6%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89/dp/B015DTB87Q>

<http://www.amazon.co.jp>  
上記のドメイン以降で、４個目以降のスラッシュを削除したいです。


CC BY-SA 3.0
2016-04-11T05:47:40.287
23906
2018-01-25T13:10:34.110
2018-01-25T13:10:34.110
19110
8619
question
php 正規表現
正規表現を使って、URL 末尾の方の情報を削除したい


一発でできてなくてすいませんが・・・こんな感じかと。

[code]

    <?php
    preg_match_all('#(https?:\/\/(?:.*?\/){4})#', 'http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-EeeBook-X205TA-WHITE10-Windows10-11-6%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89/dp/B015DTB87Q/ref=sr_1_1?s=computers&ie=UTF8&qid=1460353489&sr=1-1&keywords=%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3', $m);
    
    if (isset($m[1][0])) {
        echo rtrim($m[1][0], '\/');
    }
    
    ?>
    
[/code]

結果

[code]

    http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3-EeeBook-X205TA-WHITE10-Windows10-11-6%E3%82%A4%E3%83%B3%E3%83%81%E3%83%AF%E3%82%A4%E3%83%89/dp/B015DTB87Q
    
[/code]


CC BY-SA 3.0
2016-04-11T11:10:56.000
23919
2016-04-11T11:10:56.000
15010
23906
answer


URLから4番目のスラッシュ以降を除外してマッチさせたいということであれば、

[code]

    preg_match('#http:/(?:/[^/]+){4}#', $url, $matches);
    $result = $matches[0];
    // ドメインを限定するなら
    // #http://www\.amazon\.co\.jp(?:/[^/]+){3}#
    
[/code]

といった感じでしょうか。`http:/` から、（ドメイン名も含め）スラッシュから始まりスラッシュを含まないブロック `/[^/+]`
が4回続くまでマッチします。4番目のスラッシュなしでクエリストリング等がある場合も取り除く場合は `[^/]` の代わりに `[^/?]`
とするとよいかと思います。

まあAmazonに限った話なら `/dp/xxxx` を認識して細かくマッチさせてもいいですが。

[code]

    preg_match('#https?://www\.amazon\.co\.jp/(?:[^/]+/)?dp/[A-Z0-9]+#', $url, $matches);
    
[/code]

実行サンプル <https://regex101.com/r/nY8dN2/1>


CC BY-SA 3.0
2016-04-11T11:50:58.537
23920
2016-04-11T11:50:58.537
8000
23906
answer