You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

preg_replace在所有字符间添加多余空格的技术问题求助

解决多余空格问题的修正方案

你的问题出在两个关键地方:正则表达式的语法错误,以及没有处理替换后产生的连续空格。让我一步步帮你修正:

问题分析

  1. 正则表达式语法错误:你用了||作为分隔符,但正则里的逻辑或应该是单个|||会被当成普通字符匹配,导致替换规则没有正确生效,反而可能产生更多无效空格。
  2. 未处理连续空格:每个标签替换成空格后,多个相邻标签(比如空的<td></td>)会产生连续空格,最终结果里就会出现多余的空格。

修正后的代码

$testString = '&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;Request in progress&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Pending response&lt;/td&gt;&lt;td&gt;789653686&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;';

// 第一步:把文本中的空格替换为下划线
$rmSpace = str_replace(' ', '_', $testString);

// 第二步:修正正则表达式,用正确的|分隔符匹配HTML实体标签
$tags = '/(&lt;tr&gt;|&lt;\/tr&gt;|&lt;td&gt;|&lt;\/td&gt;|&lt;th&gt;|&lt;\/th&gt;)/';
$result = preg_replace($tags, ' ', $rmSpace);

// 第三步:清理连续空格并去除首尾空格
$result = trim(preg_replace('/\s+/', ' ', $result));

echo $result;

代码解释

  • 修正正则:将||改为|,确保正确匹配所有目标HTML实体标签。
  • 新增空格清理:trim()去掉首尾的空格,preg_replace('/\s+/', ' ', ...)把任意数量的连续空格(包括换行、制表符等)替换成单个空格,这样就能得到你期望的紧凑结果。

运行这段代码后,输出就是:100 Request_in_progress Pending_response 789653686,完全符合你的需求。

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

火山引擎 最新活动