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

如何提取特殊字符间的字符串?PHP提取多组括号内内容需求

提取字符串中所有括号内的内容

嘿,我来帮你搞定这个问题~你之前的代码只能拿到第一个括号里的内容,是因为函数只做了一次匹配查找。要获取所有括号内的文本,这里有两种实用的方法:

方法一:用正则表达式(推荐,简洁高效)

PHP的preg_match_all()函数可以一次性找到所有符合规则的匹配项,刚好适合这个场景。我们可以用一个简单的正则来匹配括号内的内容:

$input = "This is (Name). I live in (Turkey). and so on with other brackets as well";
// 正则模式:匹配括号内的非贪婪内容
preg_match_all('/\((.*?)\)/', $input, $matches);
// 提取匹配到的内容,同时去除每个元素的多余空格
$units = array_map('trim', $matches[1]);

// 输出结果
print_r($units);

运行这段代码后,$units数组里就会包含所有括号内的内容:["Name", "Turkey"],完全符合你的需求。

正则说明:

  • \(:匹配左括号(转义是因为括号在正则里是特殊字符)
  • (.*?):非贪婪匹配任意字符,确保只匹配到最近的右括号(避免把多个括号的内容连起来)
  • \):匹配右括号

方法二:修改原函数为循环查找(不用正则的方案)

如果你不想用正则,也可以修改原来的函数,通过循环不断查找下一组括号,直到没有更多匹配为止:

function extract_all_units($string, $start, $end) {
    $units = [];
    $pos = stripos($string, $start);
    
    // 循环查找所有括号对
    while ($pos !== false) {
        // 定位到左括号后的内容
        $str_after_start = substr($string, $pos + strlen($start));
        // 找对应的右括号
        $end_pos = stripos($str_after_start, $end);
        
        // 如果找不到右括号,直接退出循环
        if ($end_pos === false) {
            break;
        }
        
        // 提取括号内的内容并去除空格
        $unit = trim(substr($str_after_start, 0, $end_pos));
        $units[] = $unit;
        
        // 更新字符串,从当前右括号之后开始继续查找
        $string = substr($str_after_start, $end_pos + strlen($end));
        $pos = stripos($string, $start);
    }
    
    return $units;
}

// 测试调用
$input = "This is (Name). I live in (Turkey). and so on with other brackets as well";
$units = extract_all_units($input, '(', ')');
print_r($units);

这个函数会循环遍历字符串,每次提取一组括号内容后,就把字符串截断到当前右括号之后,继续查找下一组,直到没有更多左括号为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:38:46