我想在php中搜索并替换第一个单词,如下所示:
$str="nothing inside";
在不使用substr
输出应该是:'内部'
答案 0 :(得分:49)
使用preg_replace()
,限制为1:
preg_replace('/nothing/', 'something', $str, 1);
将正则表达式/nothing/
替换为您要搜索的任何字符串。由于正则表达式始终从左到右进行计算,因此它将始终与第一个实例匹配。
答案 1 :(得分:13)
在str_replace(http://php.net/manual/en/function.str-replace.php)的手册页上你可以找到这个函数
function str_replace_once($str_pattern, $str_replacement, $string){
if (strpos($string, $str_pattern) !== false){
$occurrence = strpos($string, $str_pattern);
return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern));
}
return $string;
}
答案 2 :(得分:3)
试试这个
preg_replace('/^[a-zA-Z]\s/', 'ReplacementWord ', $string)
它的作用是从开始到第一个空格中选择任何内容并用replcementWord替换它。在replcementWord之后注意一个空格。这是因为我们在搜索字符串中添加了\s
答案 3 :(得分:0)
preg_replace('/nothing/', 'something', $str, 1);
答案 4 :(得分:-1)
我遇到了这个问题,想要一个解决方案,这对我来说并不是100%正确,因为如果字符串就像$str = "mine'this
那样,那么这个问题就会引起问题。所以我提出了一个小问题:
$stick='';
$cook = explode($str,$cookie,2);
foreach($cook as $c){
if(preg_match("/^'/", $c)||preg_match('/^"/', $c)){
//we have 's dsf fds... so we need to find the first |sess| because it is the delimiter'
$stick = '|sess|'.explode('|sess|',$c,2)[1];
}else{
$stick = $c;
}
$cookies.=$stick;
}
答案 5 :(得分:-1)
这会检查并缓存一个命令中的第一个子串位置,如果存在,则替换它,应该更紧凑和更高性能:
if(($offset=strpos($string,$replaced))!==false){
$string=substr_replace($replaced,$replacer,$offset,strlen($replaced));
}
答案 6 :(得分:-3)
This function str_replace
是您正在寻找的。 p>
答案 7 :(得分:-3)
ltrim()将删除字符串开头的不需要的文本。
$do = 'nothing'; // what you want
$dont = 'something'; // what you dont want
$str = 'something inside';
$newstr = $do.ltrim( $str , $dont);
echo $newstr.'<br>';