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

如何使用PHP正则表达式提取字符串中@后无空格的数字?

解决@后提取数字(支持非数字前缀且无空格)的问题

我明白你的需求了——原来的正则只能匹配@直接跟数字的情况,但现在需要处理@后面先有非数字的非空格字符,再出现数字的场景,而且要求整个包含数字的@相关片段不能有空格。

调整正则表达式

核心思路是:先定位@,然后跳过它后面所有非空格、非数字的字符,再捕获连续数字,最后覆盖数字后面的非空格内容。推荐使用这个正则:

/@[^\s\d]*(\d+)[^\s]*/

各部分解释:

  • @:精准匹配@字符
  • [^\s\d]*:匹配任意数量的非空格、非数字字符(比如字母、下划线等),跳过@后面的前缀内容
  • (\d+):捕获一个或多个连续数字,这就是我们要提取的目标
  • [^\s]*:匹配数字之后的任意非空格字符(比如字母、标点),确保整个片段没有空格

示例代码实现

如果你需要提取所有符合条件的数字,用preg_match_all;如果只需要第一个匹配结果,用preg_match即可:

提取所有匹配的数字

$s = '"access_token=103782364732640461|2. myemail@domain1.com ZmElnDTiZlkgXbT8e3 @DD234 4Jrw__.3600.1281891600-10000186237005';
$matches = array();
preg_match_all('/@[^\s\d]*(\d+)[^\s]*/', $s, $matches);
// 提取到的数字存放在$matches[1]中
print_r($matches[1]); // 输出:Array ( [0] => 234 )

提取第一个匹配的数字

$s = 'This is a test <strong>@VVC345RR,</strong> text, and more text 12345';
$matches = array();
preg_match('/@[^\s\d]*(\d+)[^\s]*/', $s, $matches);
echo $matches[1]; // 输出:345

额外说明

  • 这个正则会自动忽略@后面带空格的场景(比如@abc 123),因为[^\s]会在遇到空格时停止匹配,符合你“匹配部分不能包含空格”的要求
  • 如果@后面的无空格片段里没有数字,正则不会产生匹配结果,避免无效捕获

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:21:59