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

求助:正则表达式^.*[ , ]+ php在PHP中失效,无法提取亚马逊报告指定数字

解决PHP中正则提取亚马逊报告最后一串数字的问题

Hey there! Let's figure out why your regex isn't working in PHP and get that target number extracted properly.

首先,你的正则问题根源

那个^.*[ , ]+ php表达式其实和提取最后一串数字完全不相关——它的作用是匹配**以任意字符开头,跟着一个或多个空格/逗号/制表符,再加上"php"**的行。Notepad++和记事本里能用可能只是巧合(比如你的测试文本刚好有符合这个规则的内容),但这根本不是你需要的提取数字的逻辑,难怪在PHP里拿不到想要的结果。

正确的正则与PHP实现

要提取亚马逊报告里的最后一串数字(比如7438xxxxx),我们需要针对数字串的位置来写正则:

情况1:提取整个文件末尾的最后一串数字

如果数字是在文件的最后位置(可能跟着空白符),用这个正则:

// 读取上传文件的内容
$fileContent = file_get_contents($_FILES['file']['tmp_name']);

// 匹配文件末尾的数字串,忽略末尾的空白
if (preg_match('/(\d+)\s*$/', $fileContent, $matches)) {
    $targetNumber = $matches[1];
    echo "成功提取到数字:" . $targetNumber;
} else {
    echo "未找到目标数字,请检查文件格式";
}

情况2:提取每行末尾的最后一串数字

如果你的报告是每行都有一个数字在末尾,用preg_match_all来批量提取:

$fileContent = file_get_contents($_FILES['file']['tmp_name']);
preg_match_all('/\d+$/', $fileContent, $allNumbers);

// $allNumbers[0] 就是所有行末尾的数字数组
foreach ($allNumbers[0] as $number) {
    echo "提取到数字:" . $number . "<br>";
}

为什么编辑器和PHP表现不同?

  • 编辑器的查找功能通常是按行匹配,且可能默认开启了一些宽松的匹配规则,刚好你的测试文本满足了错误正则的条件。
  • PHP的preg_*函数是严格遵循PCRE正则规范的,你的原正则逻辑不对,自然得不到预期结果。

额外提示

  1. 确保上传的文件确实包含目标数字,你可以先echo $fileContent;查看读取到的内容是否完整。
  2. 如果数字串周围有其他固定文本(比如被包裹在Order ID: 之后),可以调整正则,比如用/Order ID: (\d+)/来精准提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:00:14