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

PHP如何从含verify链接的字符串中提取可变长度数字?

如何从包含特定链接的字符串中提取动态数字?

假设我有这样一个包含链接的字符串:

$message = 'Text before link ... www.website.com/verify/12345/ ... text after link.';

已经通过if(str_contains($message, 'verify'))确认字符串里包含verify,现在需要提取其中的数字12345,这个数字可以是任意长度的其他数字。

我自己想了一种思路:先提取完整链接,用/分割后取数组末尾或倒数第二个元素,但有两个疑问:

  1. 有没有更高效直接的提取数字的方法?
  2. 如果没有更优方法,怎么从长字符串里高效获取包含verify的完整链接?

我试过用空格分割整个字符串后遍历找含verify的元素,但长字符串下效率不高;也试过substr($message, mb_strpos($message, 'verify') + 7, $length_of_number);,但数字长度不固定,没法确定$length_of_number的值。


1. 更优的数字提取方法:直接用正则表达式一步到位

不需要先提取完整链接,直接用正则匹配verify/后面的连续数字即可,这是最直接高效的方式:

$message = 'Text before link ... www.website.com/verify/12345/ ... text after link.';

if (str_contains($message, 'verify')) {
    // 正则匹配:定位verify/后面的连续数字
    if (preg_match('/verify\/(\d+)/', $message, $matches)) {
        $targetNumber = $matches[1]; // 此处得到目标数字12345
        echo $targetNumber;
    }
}
  • 正则说明:verify\/匹配固定字符串verify/(/需要转义),(\d+)捕获一个或多个连续数字,结果会存入$matches数组的第1位。
  • 优势:跳过额外的链接拆分步骤,直接定位目标数字,长字符串下性能更优。

2. 若要先提取包含verify的完整链接:用正则匹配链接边界

如果一定要先拿到完整链接,可以用正则匹配从链接起始标识(如www.)到分隔符(如空格、标点)的完整内容,同时确保包含verify:

if (str_contains($message, 'verify')) {
    // 匹配包含verify的完整链接(适配以www.开头的链接,以非空白字符结束)
    if (preg_match('/(www\.[^\s]+verify[^\s]+)/', $message, $matches)) {
        $fullLink = $matches[1]; // 得到www.website.com/verify/12345/
        // 分割链接提取数字
        $parts = explode('/', $fullLink);
        foreach ($parts as $part) {
            if (ctype_digit($part)) {
                $targetNumber = $part;
                break;
            }
        }
        echo $targetNumber;
    }
}
  • 正则说明:www\.匹配链接开头,[^\s]+匹配非空白字符(直到遇到空格或其他分隔符),确保中间包含verify,精准锁定目标链接。
  • 适配调整:如果链接可能以http://或https://开头,可将正则改为/(https?:\/\/[^\s]+verify[^\s]+)/。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:15:32