我需要这样的东西:
$string = "That's a big apple, a red apple";
$arr = array(apple, lemon);
$arr2 = array(APPLE, LEMON);
preg_replace('/($arr)/i', $arr2, $string, 1);
//output = That's a big APPLE, a red apple
这意味着使用数组替换大写单词,但只替换第一个匹配项,不区分大小写。
您的第一个变量不正确,如果它是一个数组,每个值都需要是一个正则表达式
$arr = array('/\b(apple)\b/i', '/\b(lemon)\b/i');
$arr2 = array('APPLE', 'LEMON');
preg_replace($arr, $arr2, $string, 1);
编辑:我更新了这个以包含在某些情况下可能会有所帮助的单词边界
我会使用strtr()
而不是正则表达式:
$string = "That's a big apple, a red apple";
$string = strtr( $string, array( 'apple' => 'APPLE', 'lemon' => 'LEMON'));
您的代码有几个问题。
您需要引用数组中的字符串;否则,PHP 将尝试将它们解释为常量
您不能只将$arr
变量放在正则表达式字符串中,您需要遍历数组并使用数组项的字符串值preg_replace
preg_replace
将替换所有出现的正则表达式
如果您只想替换第一次出现的字符串,您可以尝试组合strpos
和substr_replace
$string = "That's a big apple, a red apple.";
$words = array('APPLE', 'LEMON');
foreach ($words as $word){
$ini = stristr($string, $word, TRUE);
if ($ini){
$string = $ini.$word.substr($string, strlen($ini.$word));
break;
}
}
echo $string;
输出:
那是一个大苹果,一个红苹果。