2

我有一个示例代码:

$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

如何解决?

4

7 回答 7

2

您可以使用:

$regex = '/(\s)'.trim($search).'(\s)/i';
preg_match_all($regex, $text, $tmp3)
于 2012-05-17T04:53:17.953 回答
1

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

<?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;
于 2012-05-16T09:52:02.147 回答
0

您需要尝试不区分大小写的字符串替换。str_ireplace在 PHP 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;
?>
于 2012-05-16T09:50:04.740 回答
0

预期的结果实际上是:

abc DEF def ghi DEF DEF xyz

第一个“abc”与搜索字符串中的空格不匹配。

于 2012-05-16T09:50:32.800 回答
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

于 2012-05-16T09:51:50.677 回答
0

如果您想进行不区分大小写的查找和替换,str_replace 是不适合您的任务的工具。

试试这个:

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

或者

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

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

于 2012-05-16T09:52:46.693 回答
0
$string = str_ireplace( $search , 'DEF', $text);

输出 :

   DEF DEF def ghi DEF DEF xyz

如果要修剪替换的输出:

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

输出:

DEFDEFdef ghiDEFDEF xyz
于 2012-05-16T09:56:17.890 回答