如何更换字符串的某些部分?搜索和替换受影响的字符串
如何用另一部分替换字符串的某个部分?
输入字符串:
"Hello, my name is Santa"
如何用其他内容更改字符串中的所有 '?a
我想我需要一个循环,但我不确定如何使用它。foreach
如何用另一部分替换字符串的某个部分?
输入字符串:
"Hello, my name is Santa"
如何用其他内容更改字符串中的所有 '?a
我想我需要一个循环,但我不确定如何使用它。foreach
strtr ($str, array ('a' => '<replacement>'));
或者更准确地回答您的问题:
strtr ("Hello, my name is Santa", array ('a' => '<replacement>'));
有几种不同的函数/方法可以用其他东西替换字符串的某个部分,所有这些都有自己的优点。
##str_replace()
方法(二进制安全;区分大小写)
参数
混合str_replace(混合$search , 混合$replace , 混合$subject [, 国际和$count] )
str_replace()
有3个必需的参数,正如您在上面的定义中看到的那样,顺序正确,所有这些都可以将字符串作为数组作为参数!
搜索和替换
search(string) AND replace(string)→ 将搜索字符串替换为替换字符串。
search(array) AND replace(string)→ 将所有搜索元素替换为替换字符串。
search(string) AND replace(array)→会给你一个通知:“注意:数组到字符串的转换”,因为只有一个搜索字符串的替换数组没有意义,所以它尝试将数组转换为字符串。
search(array) AND replace(array)→将每个搜索元素替换为相应的替换元素(忽略键!
search(more elements) AND replace(less elements)→将每个搜索元素替换为相应的替换元素(对于缺少的替换元素,将使用空字符串)。
search(less elements) AND replace(more elements)→将每个搜索元素替换为相应的替换元素(忽略不需要的替换元素)。
主题
subject(string)→对主题字符串进行替换。
subject(array)→ 为每个数组元素执行替换。
法典
echo str_replace("search", "replace", "text search text");
echo str_replace(["t", "a"], "X", "text search text");
echo str_replace("search", ["replace1", "replace2"], "text search text");
echo str_replace(["a", "c"], ["X", "Y"], "text search text");
输出
text replace text
XexX seXrch XexX
Notice: Array to string conversion
text seXrYh text
笔记
重要的是要知道,它从数组的左到右工作。这意味着它可以替换您已经替换的值。例如:str_replace()
echo str_replace(array("a", "b"), array("b", "c"), "aabb");
//Probably expected output: bbcc
//Actual output: cccc
如果要使搜索大小写不敏感,可以使用str_ireplace()
(请注意 for-i不敏感)。i
str_replace()
/str_ireplace()
不适用于多维数组。有关此类实现,请参阅此手动注释。当然,您也可以替换为不区分大小写。str_replace()
str_ireplace()
如果你想把所有东西放在一起,并创建一个也适用于不区分大小写的多维数组的函数,你可以做这样的事情:
<?php
function str_ireplace_deep($search, $replace, $subject)
{
if (is_array($subject))
{
foreach($subject as &$oneSubject)
$oneSubject = str_ireplace_deep($search, $replace, $oneSubject);
unset($oneSubject);
return $subject;
} else {
return str_ireplace($search, $replace, $subject);
}
}
?>
##strtr()
方法(50% 二进制安全;区分大小写)
参数
字符串 strtr ( 字符串 $str , 字符串 $from , 字符串 $to )
字符串 strtr ( 字符串 $str , 数组 $replace_pairs )
该函数要么采用 3 个带有 from 和 to 字符串的参数,要么采用 2 个带有替换数组的参数,所有这些参数都可以在上面的定义中看到正确的顺序。array("search" => "replace" /* , ... */)
2 参数
它开始用相应的值替换最长的键,并执行此操作,直到它替换所有对。在这种情况下,该函数是二进制安全的,因为它使用整个键/值。key => value
3 参数
它将 from 参数替换为主题逐字节中的 to 参数。所以它不是二进制安全的!
如果 from 和 to 参数的长度不相等,则替换将在到达较短字符串的末尾时停止。
主题
它不接受数组作为主题,只是一个字符串。
法典
echo strtr("text search text", "ax", "XY");;
echo strtr("text search text", ["search" => "replace"]);
输出
teYt seXrch teYt
text replace text
笔记
与 相反,不替换替换替换的字符串。例如:str_replace()
strtr()
echo strtr("aabb", ["a" => "b", "b" => "c"]);
//If expecting to replace replacements: cccc
//Actual output: bbcc
此外,如果要用同一字符串替换多个内容,可以使用array_fill_keys()
用值填充替换数组。
strtr()
不区分大小写 NOR 是否存在不区分大小写的等效函数。有关不区分大小写的实现,请参阅此手册注释。
strtr()
与不使用数组作为主题相反,因此它也不适用于多维数组。当然,您可以将上面的代码用于多维数组,并将其与 或 实现 一起使用。str_replace()
str_replace()
strtr()
stritr()
如果你想把所有东西放在一起,并创建一个也适用于不区分大小写的多维数组的函数,你可以做这样的事情:
<?php
if(!function_exists("stritr")){
function stritr($string, $one = NULL, $two = NULL){
/*
stritr - case insensitive version of strtr
Author: Alexander Peev
Posted in PHP.NET
*/
if( is_string( $one ) ){
$two = strval( $two );
$one = substr( $one, 0, min( strlen($one), strlen($two) ) );
$two = substr( $two, 0, min( strlen($one), strlen($two) ) );
$product = strtr( $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two ) );
return $product;
}
else if( is_array( $one ) ){
$pos1 = 0;
$product = $string;
while( count( $one ) > 0 ){
$positions = array();
foreach( $one as $from => $to ){
if( ( $pos2 = stripos( $product, $from, $pos1 ) ) === FALSE ){
unset( $one[ $from ] );
}
else{
$positions[ $from ] = $pos2;
}
}
if( count( $one ) <= 0 )break;
$winner = min( $positions );
$key = array_search( $winner, $positions );
$product = ( substr( $product, 0, $winner ) . $one[$key] . substr( $product, ( $winner + strlen($key) ) ) );
$pos1 = ( $winner + strlen( $one[$key] ) );
}
return $product;
}
else{
return $string;
}
}/* endfunction stritr */
}/* endfunction exists stritr */
function stritr_deep($string, $one = NULL, $two = NULL){
if (is_array($string))
{
foreach($string as &$oneSubject)
$oneSubject = stritr($string, $one, $two);
unset($oneSubject);
return $string;
} else {
return stritr($string, $one, $two);
}
}
?>
##preg_replace()
方法(二进制安全;区分大小写)
参数
混合preg_replace(混合$pattern,混合$replacement,混合$subject[,国际$limit= -1 [,国际$count]])
preg_replace()
按上面显示的顺序有 3 个必需的参数。现在,它们中的3个都可以将字符串作为数组作为参数!
搜索和替换
search(string) AND replace(string)→将搜索正则表达式的所有匹配项替换为替换字符串。
search(array) AND replace(string)→ 将每个搜索正则表达式的所有匹配项替换为替换字符串。
search(string) AND replace(array)→会给你一个警告:“警告:preg_replace():参数不匹配,模式是一个字符串,而替换是一个数组”,因为只有一个搜索正则表达式的替换数组没有意义。
search(array) AND replace(array)→ 将每个搜索正则表达式的所有匹配项替换为相应的替换元素(忽略键!
search(more elements) AND replace(less elements)→将每个搜索正则表达式的所有匹配项替换为相应的替换元素(对于缺少的替换元素,将使用空字符串)。
search(less elements) AND replace(more elements)→将每个搜索正则表达式的所有匹配项替换为相应的替换元素(忽略不需要的替换元素)。
主题
subject(string)→对主题字符串进行替换。
subject(array)→ 为每个数组元素执行替换。
请再次注意:搜索必须是正则表达式!这意味着它需要分隔符,并且需要对特殊字符进行转义。
法典
echo preg_replace("/search/", "replace", "text search text");
echo preg_replace(["/t/", "/a/"], "X", "text search text");
echo preg_replace("/search/", ["replace1", "replace2"], "text search text");
echo preg_replace(["a", "c"], ["X", "Y"], "text search text");
输出
text replace text
XexX seXrch XexX
Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
text seXrYh text
笔记
与 相同,从数组的左到右工作。这意味着它可以替换您已经替换的值。例如:str_replace()
preg_replace()
echo preg_replace(["/a/", "/b/"], ["b", "c"], "aabb");
//Probably expected output: bbcc
//Actual output: cccc
由于搜索参数是正则表达式,因此只需传递标志 i
即可进行不区分大小写的搜索。
preg_replace()
不适用于多维数组。
请注意,您可以使用 / 作为对正则表达式的捕获组的反向引用。整个匹配项的位置以及捕获组的位置。\\n
$n
0
1-99
此外,如果反向引用紧跟一个数字,则必须使用。\${n}
中的替换不能使用回调函数作为替换。所以你必须使用preg_replace_callback()
。当您使用修饰符并获取“已弃用:preg_replace():/e 修饰符已弃用时,请改用preg_replace_callback”。请参见: 将 preg_replace() e 修饰符替换为 preg_replace_callbackpreg_replace()
e
如果你想把所有东西放在一起,并创建一个也适用于不区分大小写的多维数组的函数,你可以做这样的事情:
<?php
function preg_replace_deep($search, $replace, $subject)
{
if (is_array($subject))
{
foreach($subject as &$oneSubject)
$oneSubject = preg_replace_deep($search, $replace, $oneSubject);
unset($oneSubject);
return $subject;
} else {
return preg_replace($search, $replace, $subject);
}
}
?>
##Loops while
/ for
/ foreach
方法(非二进制安全;区分大小写)
现在,除了所有这些函数之外,您还可以使用一个简单的循环来循环字符串并替换您拥有的每对。search => replace
但是,当您执行二进制安全,不区分大小写和多维数组时,这比仅使用上述函数时会变得更加复杂。所以我不会在这里包括任何例子。
现在,上面显示的所有方法都对整个字符串进行替换。但有时您只想为字符串的某个部分替换某些内容。
为此,您可能希望/可以使用substr_replace()。
。或者另一种常见的方法是使用 substr()
并仅在该特定子字符串上应用替换,然后将字符串放在一起。当然,您也可以修改正则表达式或执行其他操作,以免将替换应用于整个字符串。