
本文介绍在 php 中高效检测字符串是否包含特定连续字符模式(如 `|++|`)的多种方法,重点对比正则表达式与原生字符串函数的适用性,并推荐使用 `str_contains()` 和 `str_replace()` 等简洁安全的现代方案。
在 PHP 中检查字符串是否包含像 |++| 这样的固定子串,最直接、高效且安全的方式是避免正则表达式——除非你真正需要模式匹配能力。原始代码中 preg_match("/|++|/", $res) 无法工作,原因有二:
- | 是正则中的“或”元字符,必须转义为 \|;
- + 是量词元字符,表示“前一个字符重复一次或多次”,单独写 ++ 会导致正则语法错误(如 + 后无前置项),正确转义应为 \+\+。
因此,若坚持用正则,需写成:
if (preg_match('/\|\+\+\|/', $res)) {
echo str_replace('|++|', "\n", $res);
} else {
echo $res;
}但这是过度设计:我们仅需精确匹配字面量 |++|,而非模糊模式。
✅ 推荐方案:使用 PHP 8.0+ 原生字符串函数
立即学习“PHP免费学习笔记(深入)”;
-
str_contains($haystack, $needle):返回 bool,语义清晰、性能优异、无需转义:
var_dump(str_contains($res, '|++|')); // true 或 false
-
更进一步,通常无需显式判断——str_replace() 本身具有“安全替换”特性:若目标子串不存在,原字符串将被原样返回,不产生副作用:
echo str_replace('|++|', "\n", $res); // ✅ 简洁、安全、可读性强
⚠️ 注意事项:
- 若运行环境为 PHP
- 切勿在正则中直接使用未转义的 |、+、*、?、. 等元字符,否则将导致解析失败或意外行为;
- 对于纯字面量搜索,正则永远比 str_contains/strpos 慢且易错,应作为最后选项。
总结:检测固定连续字符模式,优先选用 str_contains()(PHP ≥ 8.0)或 strpos()(兼容旧版),搭配 str_replace() 直接完成替换逻辑,代码更健壮、可维护性更高。











