preg_replace不区分大小写,使用两个数组替换第一个匹配

时间:2013-07-16 20:54:31

标签: php regex arrays replace uppercase

我需要这样的东西:

$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 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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

$string = "That's a big apple, a red apple";
$string = strtr( $string, array( 'apple' => 'APPLE', 'lemon' => 'LEMON'));

答案 2 :(得分:0)

您的代码存在一些问题。

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

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

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

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

答案 3 :(得分: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;

输出:

这是一个很大的苹果,一个红苹果。