$data = 'this is appLe and ApPle';
$search = 'apple';
//例如,想要使用$search
如何使用多个单词$search = array("apple","pear")
的数组
$replace = 'pear';
// $replace = array("pen","pupil")
$data = preg_replace_callback('/\b'.$search.'\b/i', function($matches) use ($replace)
{
$i=0;
return join('', array_map(function($char) use ($matches, &$i)
{
return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
}, str_split($replace)));
}, $data);
答案 0 :(得分:1)
创建一个键值数组并使用这些键构建一个动态模式,以不区分大小写的方式将键作为整个单词匹配(或者甚至是一个简单的/\b\w+\b/
正则表达式来匹配任何单词)并测试是否key存在于数组内(使用!empty($arr[strtolower($matches[0])])
)。如果存在,则处理,否则,使用找到的匹配值。
$data = 'this is appLe and ApPle and also a pEar here';
$search = array("apple","pear");
$replace = array("pen","pupil");
$arr = array_combine($search, $replace);
$pat = '/\b(?:' . implode("|", array_keys($arr)) . ')\b/i';
$data = preg_replace_callback($pat, function($matches) use ($arr)
{
$i=0;
return !empty($arr[strtolower($matches[0])]) ? join('', array_map(function($char) use ($matches, &$i)
{
return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
}, str_split($arr[strtolower($matches[0])]))) : $matches[0];
}, $data);
echo $data; // => this is pen and PeN and also a pUpiL here
请参阅PHP demo。