
本文介绍在 php 中检测字符串是否包含连续重复字符(如 `|++|`)的两种主流方法:正则表达式与原生字符串函数,并重点推荐更安全、简洁的 `str_contains()` 和直接 `str_replace()` 方案。
在 PHP 开发中,常需判断某段文本是否包含特定的连续字符模式(例如分隔符 |++|),并据此进行格式化处理(如换行)。初学者容易误用正则表达式,导致语法错误——正如问题中所示:
if (preg_match("/|++|/", $res)) { ... } // ❌ 错误:| 和 + 均为正则元字符,未转义此处 | 表示“或”逻辑,+ 表示“前一字符重复一次以上”,而 |++| 会被解析为无效正则,引发警告或匹配失败。
✅ 正确的正则写法需对特殊字符进行转义:
if (preg_match('/\|\+\+\|/', $res)) {
echo str_replace('|++|', "\n", $res);
} else {
echo $res;
}但更推荐使用 PHP 8.0+ 引入的原生字符串函数,既安全又高效:
立即学习“PHP免费学习笔记(深入)”;
- str_contains($haystack, $needle):返回布尔值,语义清晰,无需正则编译开销;
- str_replace() 本身具备“无匹配则原样返回”的特性,因此无需预先判断即可直接调用:
$res = "Header|++|Content|++|Footer";
echo str_replace('|++|', "\n", $res);
// 输出:
// Header
// Content
// Footer⚠️ 注意事项:
- 若需兼容 PHP
- 避免在简单字面量匹配场景滥用正则,易出错且性能更低;
- str_replace() 是全量替换,若仅需首次替换,可用 str_replace('|++|', "\n", $res, 1) 并启用计数参数。
综上,对于 |++| 这类固定字符串的检测与替换,优先选用 str_contains() + str_replace() 组合,代码更可读、健壮且执行更快。











