PHP如何移除字符串中双引号但保留数字后表示英寸的双引号
解决方案
问题原因
你原来使用的正则/"(\S*?)"/仅能匹配成对出现、中间无空白字符的双引号包裹内容,完全没有适配「保留数字后英寸单位双引号」的规则,因此大部分场景下匹配失效。
实现代码
直接通过负向后行断言匹配所有前缀不是数字的双引号,直接删除即可:
$processed_str = preg_replace('/(?<!\d)"/', '', $original_str);
规则说明
正则/(?<!\d)"/的逻辑:
(?<!\d)是负向后行断言,校验当前位置的前一个字符不是数字- 仅匹配满足上述条件的双引号,替换为空后,自然就只保留了前缀为数字的英寸单位双引号
效果验证
对给出的示例处理结果完全符合预期:
- 输入
this is "the first" line→ 输出this is the first line - 输入
"insert the 3.5" floppy drive"→ 输出insert the 3.5" floppy drive - 输入
I watched "the 100" and liked it→ 输出I watched the 100 and liked it - 输入
"bowie" mug→ 输出bowie mug
内容的提问来源于stack exchange,提问作者Wonko the Sane
相关产品推荐
相关产品推荐

