如何在preg_match中动态调用逗号分隔值生成正则匹配规则
实现方案
- 首先拆分逗号分隔的
$values字符串为数组,对每个元素做正则特殊字符转义,避免正则注入风险 - 再把数组元素用
|拼接为或逻辑规则,传入正则表达式即可
完整代码实现
$values = 'apple,orange,banana,mango'; public static function likecheck( $data, $values ) { // 拆分字符串并对每个关键词做正则转义 $matchItems = array_map('preg_quote', explode(',', $values)); // 拼接生成完整正则,i标识对应原需求的不区分大小写匹配 $pattern = '/(' . implode('|', $matchItems) . ')/i'; return preg_match($pattern, $data) === 1; }
特殊场景适配
如果需要和你原硬编码的逻辑一致,要求匹配的关键词前后必须带空格,可修改转义逻辑:
$matchItems = array_map(function($item){ return ' ' . preg_quote($item) . ' '; }, explode(',', $values));生成的正则就和原逻辑的
( apple | orange | banana | mango )结构完全一致。
内容的提问来源于stack exchange,提问作者Anonymous Girl
相关产品推荐
相关产品推荐

