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

PHP如何使用正则表达式提取字符串中方括号外的文本

你目前使用的正则/\[[^\]]*\]/的匹配规则是捕获所有以[开头、]结尾、中间不包含]的内容,所以只会返回方括号内部的内容,和你要提取方括号外文本的需求刚好相反。

以下是两种可行的实现方案:

方法1:使用preg_split拆分字符串

该方案思路更简单,直接把所有[xxx]格式的内容作为分隔符切割原字符串,再过滤空值和首尾空白即可得到目标结果。

$text = "       My [ground]name[test]Jhon[random]petor [shorts].";
// 以方括号包裹的内容为分隔符拆分字符串
$splitResult = preg_split("/\[[^\]]*\]/", $text);
// 处理每一段的首尾空白,过滤空值后重置数组索引
$finalResult = array_values(array_filter(array_map('trim', $splitResult), function($val) {
    return $val !== '';
}));

print_r($finalResult);

输出结果:

Array
(
    [0] => My
    [1] => name
    [2] => Jhon
    [3] => petor
)

方法2:使用preg_match_all直接匹配

如果你更倾向于直接匹配的方式实现,可以用带前后断言的正则,直接捕获方括号外的文本段:

$text = "       My [ground]name[test]Jhon[random]petor [shorts].";
preg_match_all("/(?<=^|\])[^\[]+(?=\[|$)/", $text, $matches);
// 同样处理空白和空值
$finalResult = array_values(array_filter(array_map('trim', $matches[0])));

print_r($finalResult);

上述正则的逻辑是:匹配前面为字符串开头/右方括号、后面为左方括号/字符串结尾的所有非左方括号字符段,刚好对应方括号外的内容。

内容的提问来源于stack exchange,提问作者Bikash Ranjan Nayak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:36:05