在php中使用str_replace时出错?

时间:2012-05-16 09:46:59

标签: php string

我有一个示例代码:

$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc"
$string = str_replace(" ".trim($search)." ", 'DEF', $text);
echo $string;

结果是:“abc ABC def ghi DEF aBc xyz”//仅Abc更改

但结果恰恰是:“abc DEF def ghi DEF DEF xyz

如何解决?

7 个答案:

答案 0 :(得分:2)

您可以使用:

$regex = '/(\s)'.trim($search).'(\s)/i';
preg_match_all($regex, $text, $tmp3)

答案 1 :(得分:1)

您可以对str_ireplace的3个变体使用str_replace(不区分大小写abc)3次

<?php
$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc";
$string = str_ireplace(' ' . trim($search), ' DEF', $text);
$string = str_ireplace(' ' . trim($search) . ' ', ' DEF ', $text);
$string = str_ireplace(trim($search) . ' ', 'DEF ', $text);
echo $string;

或者您可以使用正则表达式:

$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc";
$string = preg_replace("/(\s*)abc(\s*)/i", '$1DEF$2', $text);
echo $string;

答案 2 :(得分:0)

您需要尝试不区分大小写的字符串替换。 PHP中的str_ireplace http://codepad.org/atBbj8Kp

 <?php
   $text = "abc ABC def ghi Abc aBc xyz";
    $search = "abc";
    $string = str_replace(" ".trim($search)." ", 'DEF', $text);
    echo $string;
    echo PHP_EOL;
    $string = str_ireplace(" ".trim($search)." ", 'DEF', $text);
    echo $string;
?>

答案 3 :(得分:0)

预期结果实际上是:

abc DEF def ghi DEF DEF xyz

首先'abc'与搜索字符串中的空格不匹配。

答案 4 :(得分:0)

我认为这就是你要找的东西?基本上它使用不区分大小写的搜索并替换str_ireplace

<?php
$text = 'abc ABC def ghi Abc aBc xyz';
$search = 'abc';
$string = str_ireplace(trim($search), 'DEF', $text);
echo $string;
?>

输出:DEF DEF def ghi DEF DEF xyz

答案 5 :(得分:0)

如果您想进行不区分大小写的查找和替换,

str_replace是您的任务的错误工具。

试试这个例子:

$string = stri_replace(trim($search), 'DEF', $text)

OR

$string = preg_replace('@\b' . trim($search) . '\b@i', 'DEF', $text);

如果问题中的额外空格是为了防止部分匹配 - 你需要preg_replace版本,除非你不在乎它不会找到/替换第一个/最后一个字符串

答案 6 :(得分:0)

$string = str_ireplace( $search , 'DEF', $text);

Out put:

   DEF DEF def ghi DEF DEF xyz

如果你想修剪替换的输出:

$string = str_ireplace($search, 'DEF', $text);
$string = str_ireplace(" DEF ", 'DEF', $string);

Out Put:

DEFDEFdef ghiDEFDEF xyz