PHP中str_contains函数是否支持多needle子串匹配
str_contains多子串匹配实现方案 PHP原生str_contains仅支持传入单个字符串类型的$needle参数,无法直接传入多个待匹配子串,不需要零散重复调用该函数,通过简单封装就能实现多子串匹配需求,常见实现方式如下:
- 遍历判断封装(日常开发首选,可读性高、无转义风险)
核心逻辑是遍历所有待匹配子串,只要任意一个子串存在于目标字符串中就返回true,全部匹配失败才返回false,代码参考:
如果业务需求是所有待匹配子串都必须在目标字符串中存在才返回function str_contains_any(string $haystack, array $needles): bool { foreach ($needles as $needle) { // 兼容原生str_contains对空字符串返回true的规则 if ($needle === '' || str_contains($haystack, $needle)) { return true; } } return false; } // 调用示例 var_dump(str_contains_any('hello world', ['hi', 'world'])); // 输出 bool(true) var_dump(str_contains_any('foo bar baz', ['abc', 'def'])); // 输出 bool(false)true,只需要反转判断逻辑:遍历过程中遇到不存在的子串直接返回false,全部子串校验通过后再返回true即可。 - 正则匹配实现(适合待匹配子串量级极大的场景)
可以将所有待匹配子串逐个调用preg_quote转义正则特殊字符后,拼接为统一的正则规则,通过一次preg_match调用完成匹配。注意这种方式必须做转义处理,否则子串中存在.、/、*这类正则特殊字符时,会出现匹配结果错误甚至程序报错的问题。
内容的提问来源于stack exchange,提问作者santa
相关产品推荐
相关产品推荐

