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
相关产品推荐
相关产品推荐

