簡體   English   中英

如何使用preg_match從URL獲取ID?

[英]How to get an ID from an URL using preg_match?

問題

我目前正在對URL執行preg_match 該網址在第二個參數或第三個參數中具有特定的ID。 但是我不知道如何才能更有效地做到這一點。

preg_match('~http://www.example.com/some/(.+?)/~is', $url, $id);
if (!isset($id[1])) {
    preg_match('~http://www.example.com/some/thing/(.+?)/~is', $url, $id);
    if (!isset($id[1])) {
        preg_match('~http://www.example.com/some/other/(.+?)/~is', $url, $id);
        if (!isset($id[1])) {
            preg_match('~http://www.example.com/some/thingelse/(.+?)/~is', $url, $id);
            if (!isset($id[1])) {
                return false
            }
        }
    }
}

我想做什么

if (preg_match('~http://www.example.com/some/(.+?)/~is', $url, $id)) {
    $id = $id[1];
} else if (preg_match('~http://www.example.com/some/(.+?)/(.+?)/~is', $url, $id)) {
    $id = $id[1];
} else {
    return false;
}

但是,這似乎不起作用。

如果以下正則表達式實際上按您希望的那樣起作用

if (preg_match('~http://www.example.com/some/(.+?)/~is', $url, $id)) {
    $id = $id[1];
} else if (preg_match('~http://www.example.com/some/(.+?)/(.+?)/~is', $url, $id)) {
    $id = $id[1];
} else {
    return false;
}

...那么您將永遠無法達到第二種情況。 匹配將已經在第一個RegEx中進行,因為開始或第二個表達式與第一個表達式相同。 而且即使您將它們繞開,也總是會從第一個參數/路徑部分獲得id,因為您在兩個結果上都設置了$id = $id[1]

如評論中所述,最好使用parse_url代替:

$urls = [
    'http://www.example.com/some/thingelse/foo/bar/baz/',
    'http://www.example.com/some/foo/bar/baz/',
];

foreach ($urls as $url) {
    echo "Checking $url", PHP_EOL;

    $path = parse_url($url, PHP_URL_PATH);
    $parts = explode('/', $path);

    echo "Second parameter: ", $parts[2], PHP_EOL;
    echo "Third parameter:  ", $parts[3], PHP_EOL;
}

輸出:

Checking http://www.example.com/some/thingelse/foo/bar/baz/
Second parameter: thingelse
Third parameter:  foo

Checking http://www.example.com/some/foo/bar/baz/
Second parameter: foo
Third parameter:  bar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM