You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从URL中提取ID?PHP正则匹配结果不符合预期求解

解决URL中ID提取的问题

你遇到的核心问题是正则表达式里的.*属于贪婪匹配——它会尽可能多地捕获字符,直到找到字符串中最后一个-,所以才会把-title-of-the也包含进去。另外还要注意:eregi函数在PHP 5.3之后就已经被废弃了,推荐使用更安全、功能更完善的preg_match系列函数。

下面给你两种可靠的解决方案:

方案1:精准匹配数字ID(推荐)

既然你的ID是纯数字,直接用\d+匹配一个或多个数字,这样既精准又不会出现贪婪问题:

$text = '/news/35555555555-title-of-the-article';
// 使用preg_match,正则匹配news/后的数字直到第一个-
preg_match("#news/(\d+)-#", $text, $regs);
echo $regs[1]; // 输出:35555555555

方案2:非贪婪匹配(适用于ID含非数字的情况)

如果ID可能包含字母或其他字符,只需要抓取第一个-之前的内容,可以用非贪婪模式.*?(注意必须用preg_match,eregi不支持非贪婪):

$text = '/news/35555555555-title-of-the-article';
preg_match("#news/(.*?)-#", $text, $regs);
echo $regs[1]; // 输出:35555555555

补充说明

  • preg_match默认区分大小写,如果你的URL可能有大小写混合的情况,比如News/,可以在正则末尾加i修饰符:preg_match("#news/(\d+)-#i", $text, $regs)
  • 用\d+的方式比通配符匹配效率更高,因为它只匹配数字,避免了不必要的字符扫描。

内容的提问来源于stack exchange,提问作者AlbaStar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:05:22