-1

我又回来了,再次表明我的无知。

我需要帮助来获取特定位置 URL 中的数字。URL 的其余部分也可能包含数字,因此我需要将其限制为仅从一个位置获取数字,例如:

http://www.example.com/99-Kittens-1382/animals

我一直在使用 ereg_replace 来获取所有数字,但后来意识到:
1)不推荐使用 ereg_replace
2)某些 URL 可能在其他地方有数字。

所以在这种情况下,我最终得到了 991382 而不是我想要的 1382。

URL 结构应该始终是我们拥有的 -####/ 所以我认为我们应该能够基于它进行匹配。(破折号,四个数字,正斜杠)

我一直对正则表达式匹配很糟糕。谁能帮我吗?

4

4 回答 4

2

如果没有正则表达式的复杂性,这可能会更好:

$urlParts = parse_url($str);
$pathParts = explode('/', $urlParts['path']);
$firstParts = explode('-', $pathParts[1]);
$numberYouWant = array_pop($firstParts);

看到它工作

于 2012-01-16T17:39:38.637 回答
1
preg_match('#-(\d{4})/#', $url, $matches);
echo $matches[1];
于 2012-01-16T17:39:51.287 回答
1
$a="http://www.example.com/99-Kittens-1382/animals";
echo preg_match("/.*?\\/(\\d+)-.*?-(\\d+)\\//",$a,$m)."\n";
print_r($m);

1
Array
(
    [0] => http://www.example.com/99-Kittens-1382/
    [1] => 99
    [2] => 1382
)
于 2012-01-16T17:41:32.520 回答
0
$return = preg_match('/-([0-9]{4})/', 'http://www.example.com/99-Kittens-1382/animals', $matches)

应该工作, ( 和 ) 组匹配, [0-9] 是要匹配的字符范围, {4} 是您要匹配的前一组的确切数量。比赛在 $matches[1]

于 2012-01-16T17:42:37.263 回答