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

使用PHP正则表达式清理存在部分重复格式的长字符串

解决PHP正则清理重复/__text后缀的问题

看起来你需要清理字符串里重复出现的/__text后缀,同时保留原有的字段层级结构。这里有几个实用的正则方案,你可以根据具体需求选择:

基础方案:直接移除所有/__text后缀

如果你的核心需求就是去掉所有冗余的/__text,让字符串回归简洁的字段列表,用这个最简单的正则就能搞定:

$originalString = "Name/__text,Password/__text,Profile/__text,Locale/__text,UserType/__text,PasswordUpdateDate/__text,Columns/0/Name/__text,Columns/0/Label/__text,Columns/0/Order/__text,Columns/1/Name/__text,Columns/1/Label/__text,Columns/1/Order/__text,Columns/2/Name/__text,Columns/2/Label/__text,Columns/2/Order/__text,Columns/3/Name/__text,Columns/3/Label/__text,Columns/3/Order/__text,Columns/4/Name/__text,Columns/4/Label/__text,Columns/4/Order...";

// 全局替换所有/__text为空字符串
$cleanedString = preg_replace('/\/__text/', '', $originalString);

echo $cleanedString;

这个正则/\/__text/会精准匹配目标后缀,PHP的preg_replace默认会全局替换所有匹配项,不需要额外加修饰符。

进阶严谨方案:仅替换字段末尾的/__text

如果担心字符串中间可能意外出现/__text(虽然你的例子里没有,但做严谨性处理很有必要),可以用锚定匹配的正则,确保只替换字段结尾的目标内容:

// 匹配/__text后面跟着逗号或字符串结尾的情况,替换成对应的分隔符或空
$cleanedString = preg_replace('/\/__text(,|$)/', '$1', $originalString);

这个正则会把Name/__text,转换成Name,,把最后一个字段的/__text直接删掉,完全保留原有的分隔结构。

额外扩展:把Columns结构转成结构化数据

如果你的需求不止是清理后缀,还想把重复的Columns条目整理成更易操作的结构化格式(比如JSON数组),可以搭配字符串拆分和数组处理:

// 第一步先清理后缀
$cleanedFields = preg_replace('/\/__text/', '', $originalString);
// 拆分字段成数组
$fieldArray = explode(',', $cleanedFields);

$columnsData = [];
foreach ($fieldArray as $field) {
    if (str_starts_with($field, 'Columns/')) {
        // 拆分Columns的层级路径
        [, $columnIndex, $keyName] = explode('/', $field);
        if (!isset($columnsData[$columnIndex])) {
            $columnsData[$columnIndex] = [];
        }
        $columnsData[$columnIndex][$keyName] = ''; // 这里可以根据需求设置默认值
    }
}

// 转成格式化的JSON输出
echo json_encode($columnsData, JSON_PRETTY_PRINT);

处理后Columns部分会变成清晰的键值对数组,后续做业务处理会方便很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:12