str_replace只替换⼀次字符串的⽅法
我们都知道,在PHP⾥Strtr,strreplace等函数都可以⽤来替换,不过他们每次替换的时候都是全部替换,举个例⼦: "abcabbc",这个字符串如果使⽤上边的函数来把其中的b替换掉,那么他会全部替换掉,但是如果你想只替换⼀个或两个怎么办呢?看下边的解决⽅法:
这是个⽐较有点意思的问题,正好之前也做过类似的处理,当时我是直接利⽤preg_replace实现的。
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
因为preg_replace的第四个参数可以实现替换次数的限制,所以这个问题这样处理很⽅便。但是在查看php上关于
str_replace的函数评论后,从中居然也可以挑出⼏个有代表性的函数来。
str_replace_once
思路⾸先是到待替换的关键词的位置,然后利⽤substr_replace函数直接替换之。
复制代码代码如下:字符串replace函数
<?php
function str_replace_once($needle, $replace, $haystack) {
// Looks for the first occurence of $needle in $haystack
// and replaces it with $replace.
$pos = strpos($haystack, $needle);
if ($pos === false) {
return $haystack;
}
return substr_replace($haystack, $replace, $pos, strlen($needle));
}
>
str_replace_limit
还是利⽤preg_replace,只不过它的参数更象preg_replace了,⽽且对某些特殊字符做了转义处理,通⽤性更好。
复制代码代码如下:
<?
function str_replace_limit($search, $replace, $subject, $limit=-1) {
// constructing mask(s)...
if (is_array($search)) {
foreach ($search as $k=>$v) {
$search[$k] = '`' . preg_quote($search[$k],'`') . '`';
}
}
else {
$search = '`' . preg_quote($search,'`') . '`';
}
// replacement
return preg_replace($search, $replace, $subject, $limit); }
>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论