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

使用PHP preg_replace提取括号内含-_符号的数字

解决PHP提取括号内特定格式数字的问题

首先,你原来的正则思路有点小问题——直接替换非目标字符会把所有分散的数字、减号、下划线都拼在一起,没法精准定位到括号内的目标内容。咱们换个更精准的方式来实现:

方法1:用preg_match直接匹配目标内容(更直观)

如果只需要提取那一个符合条件的括号内容,用preg_match会更直接,正则专门匹配括号内由数字、-、_组成的内容:

$FolderTitle[$Counter] = "This is 1 example (text) with a (number)(01230_12-3)";
// 正则解释:匹配(开头,捕获里面仅包含数字、-、_的内容,最后是)
preg_match('/\(([0-9\-_]+)\)/', $FolderTitle[$Counter], $matches);
// 提取捕获组的内容,也就是括号里的目标字符串
$FolderNumber[$Counter] = isset($matches[1]) ? $matches[1] : '';
echo $FolderNumber[$Counter]; // 输出:01230_12-3

方法2:用preg_replace实现(符合你要求的函数)

如果一定要用preg_replace,可以把所有不符合条件的内容都替换为空,只留下目标括号内的内容:

$FolderTitle[$Counter] = "This is 1 example (text) with a (number)(01230_12-3)";
// 正则解释:匹配所有内容,要么保留括号内的目标内容,要么替换为空
$FolderNumber[$Counter] = preg_replace('/.*?\(([0-9\-_]+)\)|.*/', '$1', $FolderTitle[$Counter]);
echo $FolderNumber[$Counter]; // 输出:01230_12-3

正则小说明

  • \( 和 \):转义括号,因为括号在正则里是特殊语法字符
  • [0-9\-_]+:匹配1个或多个数字、转义后的减号(避免在字符集里被当作范围符号)、下划线
  • 方法2里的.*?是非贪婪匹配,确保只匹配到最近的括号,不会把多个括号内容错误连起来

如果你的字符串里有多个符合条件的括号内容,需要提取所有的话,可以用preg_match_all:

preg_match_all('/\(([0-9\-_]+)\)/', $FolderTitle[$Counter], $matches);
// $matches[1]就是所有符合条件的括号内内容的数组
print_r($matches[1]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:23:45