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

如何高效去除字符串中花括号外部的可变无关文本?

最佳修剪花括号外部文本的方法

嘿,这个需求挺常见的,我给你分享几个实用的解决方案,都是针对你给出的PHP场景的:

方法一:正则表达式(最简洁)

因为你只需要保留花括号及其内部的内容,不管前后的文本是什么,用正则匹配是最直接的方式。这里我们可以用preg_match函数来提取目标内容:

保留花括号及其内部内容

$myString = "10:0{ 'name':'John', 'age':30, 'car':null }24:0";
// 正则匹配从第一个{到最后一个}的所有内容,s修饰符允许匹配换行符
preg_match('/{.*}/s', $myString, $matches);
// 三元运算符处理没有匹配到的情况,避免报错
$trimmedString = $matches[0] ?? '';
echo $trimmedString; // 输出: { 'name':'John', 'age':30, 'car':null }

只保留花括号内部的内容(去掉花括号)

如果你的需求是去掉外部文本的同时也去掉花括号,只留里面的内容,可以稍微调整正则:

preg_match('/{(.*)}/s', $myString, $matches);
$innerContent = $matches[1] ?? '';
echo $innerContent; // 输出:  'name':'John', 'age':30, 'car':null 

方法二:字符串位置截取(更直观,适合无嵌套花括号场景)

如果你担心正则的复杂度,或者确定字符串里只有一对花括号,可以用字符串定位函数来手动截取:

$myString = "10:0{ 'name':'John', 'age':30, 'car':null }24:0";
// 找到第一个左花括号的位置
$startPos = strpos($myString, '{');
// 找到最后一个右花括号的位置
$endPos = strrpos($myString, '}');

// 先判断是否找到有效的花括号对
if ($startPos !== false && $endPos !== false && $endPos > $startPos) {
    // 从左花括号位置开始,截取到右花括号结束(包含右花括号)
    $trimmedString = substr($myString, $startPos, $endPos - $startPos + 1);
    echo $trimmedString; // 输出预期内容
} else {
    // 处理没有找到有效花括号的异常情况
    echo "未在字符串中找到有效的花括号对";
}

注意事项

  • 如果你的字符串里存在嵌套花括号(比如{ {a:1} b:2 }),上面的基础正则会失效,这时候需要用递归正则:/{(?:[^{}]|(?R))*}/s,不过这种场景在你的示例里应该不会出现,先记住基础用法就好。
  • 两种方法都能处理外部文本任意变化的情况,完全不用关心前后的内容是什么,只要花括号存在就能准确提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:55:15