我有一个示例代码:
$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
”
如何解决?
您可以使用:
$regex = '/(\s)'.trim($search).'(\s)/i';
preg_match_all($regex, $text, $tmp3)
您可以对 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;
您需要尝试不区分大小写的字符串替换。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;
?>
预期的结果实际上是:
abc DEF def ghi DEF DEF xyz
第一个“abc”与搜索字符串中的空格不匹配。
我想这就是你要找的吗?基本上它使用不区分大小写的搜索和替换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
如果您想进行不区分大小写的查找和替换,str_replace 是不适合您的任务的工具。
试试这个:
$string = stri_replace(trim($search), 'DEF', $text)
或者
$string = preg_replace('@\b' . trim($search) . '\b@i', 'DEF', $text);
如果问题中的额外空格是为了防止部分匹配 - 你想要这个preg_replace
版本,除非你不在乎它不会找到/替换第一个/最后一个字符串
$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