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

PHP preg_match匹配字符串末尾空格后接数字且空格前有内容的正则规则

原有正则问题分析

你之前使用的#^(.)* (\d*)$#存在两个明显缺陷:

  1. 开头的(.)*等价于.*,允许匹配0长度的空内容,当输入为 1212时,.*匹配开头的空字符,后续的 \d*刚好匹配剩余的空格+数字,直接触发误匹配。
  2. 结尾的\d*允许匹配0个数字,会错误命中以空格结尾、没有数字的无效字符串。

正确正则方案

修正后的正则如下:

#^.+\s(\d+)$#

规则逻辑说明:

  • ^.+:要求字符串开头到数字前的空格之间,至少存在1个任意字符,直接排除了「空格+数字直接出现在开头」的无效场景
  • \s:匹配数字前面的单个空格,如果你需要兼容多个空格间隔的场景,可以改成\s+
  • (\d+):匹配结尾的1位及以上数字,结果会存入捕获分组1
  • $:锚定匹配到字符串末尾,保证匹配到的数字确实是结尾内容

如果你的文件名允许包含换行符,可以在正则末尾加s修饰符,让.可以匹配换行符,写法变为#^.+\s(\d+)$#s。


使用示例

// 有效场景测试
$str = 'a b 1212';
preg_match('#^.+\s(\d+)$#', $str, $matches);
if (isset($matches[1])) {
    var_dump($matches[1]); // 输出 string(4) "1212"
}

// 无效场景测试
$str = ' 1212';
preg_match('#^.+\s(\d+)$#', $str, $matches);
var_dump(isset($matches[1])); // 输出 bool(false)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:11