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

PCRE正则表达式如何捕获除末尾两位数字外的字符串?

PCRE正则捕获末尾两位数字前的目标内容

针对你提到的test01、abcd02、xyz05这类末尾固定两位数字的字符串,要捕获前面的目标部分,有两种实用的PCRE正则方案,可根据实际场景选择:

方案1:通用匹配(兼容前面含数字的场景)

如果目标字符串前面的内容可能包含数字(比如abc12301这类情况),但始终保证最后两位是数字,用这个正则:

^(.*?)\d{2}$

正则拆解:

  • ^:锚定字符串起始位置,避免匹配中间片段
  • (.*?):非贪婪捕获组,匹配任意字符(默认不含换行,若要支持换行需加s修饰符,即/^(.*?)\d{2}$/s),直到遇到后面的两位数字为止
  • \d{2}:精确匹配两位阿拉伯数字
  • $:锚定字符串结束位置,确保最后两位确实是字符串的结尾

方案2:精准匹配(仅前面为非数字内容)

如果确定前面的内容完全不含数字,用这个更严谨的正则:

^(\D*)\d{2}$

正则拆解:

  • \D*:匹配任意数量的非数字字符,相比.*?更精准,避免误匹配不需要的内容
  • 其余部分和方案1一致,确保末尾是两位数字

示例验证

比如在PHP中使用方案1的代码:

$targets = ["test01", "abcd02", "xyz05", "abc12301"];
foreach ($targets as $str) {
    if (preg_match('/^(.*?)\d{2}$/', $str, $matches)) {
        echo "原字符串:{$str} → 捕获内容:{$matches[1]}\n";
    }
}

输出结果:

原字符串:test01 → 捕获内容:test
原字符串:abcd02 → 捕获内容:abcd
原字符串:xyz05 → 捕获内容:xyz
原字符串:abc12301 → 捕获内容:abc123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:22:04