-1

我需要这样的东西:

$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

这意味着使用数组替换大写单词,但只替换第一个匹配项,不区分大小写。

4

4 回答 4

3

您的第一个变量不正确,如果它是一个数组,每个值都需要是一个正则表达式

$arr = array('/\b(apple)\b/i', '/\b(lemon)\b/i');
$arr2 = array('APPLE', 'LEMON');

preg_replace($arr, $arr2, $string, 1);

编辑:我更新了这个以包含在某些情况下可能会有所帮助的单词边界

于 2013-07-16T21:02:34.577 回答
0

我会使用strtr()而不是正则表达式:

$string = "That's a big apple, a red apple";
$string = strtr( $string, array( 'apple' => 'APPLE', 'lemon' => 'LEMON'));
于 2013-07-16T21:04:14.480 回答
0

您的代码有几个问题。

  • 您需要引用数组中的字符串;否则,PHP 将尝试将它们解释为常量

  • 您不能只将$arr变量放在正则表达式字符串中,您需要遍历数组并使用数组项的字符串值preg_replace

  • preg_replace将替换所有出现的正则表达式

如果您只想替换第一次出现的字符串,您可以尝试组合strpossubstr_replace

于 2013-07-16T21:05:47.287 回答
0
$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;

输出:

那是一个大苹果,一个红苹果。

于 2013-07-16T21:14:27.717 回答