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

PHP如何将字符串中多组成对|的首尾符号替换为双引号?

问题原因

两次无状态的全局字符串替换没有区分成对的包裹边界,相邻两组内容之间的竖线会被错误替换,导致引号和后续单词直接相连,缺少分隔空格。

正确实现方案

使用正则替换函数preg_replace成对匹配竖线包裹的内容,自动处理内容前后的多余空格:

// 原始字符串
$text = "Today is | nice day | go to | school now | and enjoy | your life |.";

// 直接输出普通双引号的写法
$text = preg_replace('/\|\s*(.*?)\s*\|/', '"$1"', $text);

// 如果需要输出HTML转义双引号,替换为如下写法
// $text = preg_replace('/\|\s*(.*?)\s*\|/', '"$1"', $text);

输出结果

执行后即可得到你期望的效果:
Today is "nice day" go to "school now" and enjoy "your life".

正则逻辑说明

  • \|:转义匹配竖线本身(竖线是正则元字符,需要加反斜杠转义)
  • \s*:匹配竖线内侧任意数量的空白字符,自动去除内容前后多余空格
  • (.*?):非贪婪模式匹配两个竖线之间的所有内容,捕获到分组1
  • 替换时用双引号包裹分组1的内容,实现成对替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:06