如何检测输入字符串是否匹配数组中的字符串或正则表达式
实现混合字符串与正则的匹配检测
核心思路
遍历待检测列表,区分普通字符串和正则表达式(通过首尾是否为/),分别用不区分大小写的字符串匹配、正则匹配处理,收集所有匹配成功的项,最后判断是否有匹配结果。
完整实现代码
<?php $list = [ // 待检测的字符串/正则数组 "lorem ipsum", // 普通字符串 "example", // 另一个普通字符串 "/(nulla)/", // 正则表达式 ]; $input_string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer quam ex, vestibulum sed laoreet auctor, iaculis eget velit. Donec mattis, nulla ac suscipit maximus, leo metus vestibulum eros, nec finibus nisl dui ut est. Nam tristique varius mauris, a faucibus augue."; $matchedItems = []; foreach ($list as $item) { // 判断当前项是否为正则表达式(首尾以/包裹) if (strlen($item) >= 2 && $item[0] === '/' && $item[strlen($item)-1] === '/') { // 去除首尾的/,提取正则主体 $pattern = substr($item, 1, -1); // 执行不区分大小写的正则匹配 if (preg_match("/$pattern/i", $input_string, $matches)) { // 优先取捕获组内容,无捕获组则取正则主体 $matchedContent = !empty($matches[1]) ? $matches[1] : $pattern; $matchedItems[] = $matchedContent; } } else { // 普通字符串,不区分大小写检测是否存在于输入中 if (stripos($input_string, $item) !== false) { $matchedItems[] = $item; } } } // 检测是否有至少1项匹配 if (count($matchedItems) >= 1) { // 执行后续操作... echo "匹配项:" . implode(", ", $matchedItems); // 输出示例结果:匹配项:lorem ipsum, nulla } else { echo "无匹配项"; } ?>
代码说明
- 正则识别:通过检查字符串首尾是否为
/,快速区分正则表达式和普通字符串,适配示例格式。 - 字符串匹配:用
stripos实现不区分大小写的存在性检测,满足示例中Lorem ipsum匹配lorem ipsum的需求。 - 正则处理:去除首尾的
/后执行匹配,同时提取捕获组内容作为匹配项(如示例中的nulla),无捕获组则使用正则主体。 - 结果收集:将所有匹配项存入数组,通过数组长度判断是否有匹配结果。
内容的提问来源于stack exchange,提问作者Tunku Salim
相关产品推荐
相关产品推荐

