PHP preg_替换-/

PHP preg_替换-/,php,preg-replace,str-replace,ereg-replace,Php,Preg Replace,Str Replace,Ereg Replace,我又回来了,再次表明我的无知 我需要帮助抓取特定地点URL中的号码。URL的其余部分也可能包含数字,因此我需要将其限制为仅从一个位置获取数字,例如: 我一直在使用ereg_replace获取所有数字,但后来意识到: 1 ereg_replace已弃用 2有些URL可能在其他地方有数字 所以在这个例子中,我最终得到了991382,而不是我想要的1382 URL结构应该始终是我们拥有的-/因此我认为我们应该能够基于此进行匹配。破折号,四个数字,正斜杠 我对正则表达式匹配一直很糟糕。有人能帮我吗?如果

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

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

我一直在使用ereg_replace获取所有数字,但后来意识到: 1 ereg_replace已弃用 2有些URL可能在其他地方有数字

所以在这个例子中,我最终得到了991382,而不是我想要的1382

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


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

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

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


如果有效,组和匹配项,[0-9]是要匹配的字符范围,{4}是要匹配的前一组的确切数量。匹配项在$matches[1]

中,请参阅以获取不推荐的问题和/或一些有用的工具。不错,但是如果url是http://www.example.com/I-Would-Like-2199-Kittens-1382/animals -你会得到2199。仍然有效。由于/要求,您将无法匹配2199。这个正则表达式所做的唯一假设是1个必需的数字是4位数字,2个以-和/为边界,3第一个匹配是唯一重要的匹配。我们可以想象http://www.example.com/something/kitten-1234/animals,但我不知道足够的OP是否匹配在这种情况下是正确的。我们将需要一个完整的输入范围和所需的部分,例如,第一个url路径部分中破折号后的最终数字。公平点,忘记了/。我怀疑这与OPs要求有关的唯一实际问题是,数字的位数可能并不总是4。尽管这可以通过{1,n}子句轻松避免,其中n是最大字符数。非常感谢。如果允许的话,我会在5分钟内“检查”你的答案。你试过这个吗?根据我的经验,爆炸是相当昂贵的,也许比正则表达式更贵。解析url似乎也相当密集。我在页眉中所需的页面上实现了它,页面加载不到1秒。@EugenRieck我没有,虽然我们可能谈论的是微秒-这取决于在一次执行脚本时需要执行多少次。请记住,PCRE发动机也相当昂贵。。。
preg_match('#-(\d{4})/#', $url, $matches);
echo $matches[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
)
$return = preg_match('/-([0-9]{4})/', 'http://www.example.com/99-Kittens-1382/animals', $matches)