preg_replace在所有字符间添加多余空格的技术问题求助
解决多余空格问题的修正方案
你的问题出在两个关键地方:正则表达式的语法错误,以及没有处理替换后产生的连续空格。让我一步步帮你修正:
问题分析
- 正则表达式语法错误:你用了
||作为分隔符,但正则里的逻辑或应该是单个|。||会被当成普通字符匹配,导致替换规则没有正确生效,反而可能产生更多无效空格。 - 未处理连续空格:每个标签替换成空格后,多个相邻标签(比如空的
<td></td>)会产生连续空格,最终结果里就会出现多余的空格。
修正后的代码
$testString = '<tr><td>100</td><td>Request in progress</td><td></td><td></td><td>Pending response</td><td>789653686</td><td></td><td></td><td></td></tr>'; // 第一步:把文本中的空格替换为下划线 $rmSpace = str_replace(' ', '_', $testString); // 第二步:修正正则表达式,用正确的|分隔符匹配HTML实体标签 $tags = '/(<tr>|<\/tr>|<td>|<\/td>|<th>|<\/th>)/'; $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




