从字符串的开头删除一个字符串

时间:2010-12-23 08:40:40

标签: php string

我有一个看起来像这样的字符串:

$str = "bla_string_bla_bla_bla";

如何删除第一个bla_;但只有在字符串的开头找到它?

使用str_replace(),它会删除所有 bla_

11 个答案:

答案 0 :(得分:290)

普通形式,没有正则表达式:

$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';

if (substr($str, 0, strlen($prefix)) == $prefix) {
    $str = substr($str, strlen($prefix));
} 

需要: 0.0369 ms (0.000,036,954秒)

并且:

$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';
$str = preg_replace('/^' . preg_quote($prefix, '/') . '/', '', $str);

需要: 0.1749 ms (0.000,174,999秒)第一次运行(编译), 0.0510 ms (0.000,051,021秒)之后。

显然在我的服务器上描述。

答案 1 :(得分:50)

您可以使用带有插入符号(^)的正则表达式,该符号将匹配锚定到字符串的开头:

$str = preg_replace('/^bla_/', '', $str);

答案 2 :(得分:16)

function remove_prefix($text, $prefix) {
    if(0 === strpos($text, $prefix))
        $text = substr($text, strlen($prefix)).'';
    return $text;
}

答案 3 :(得分:5)

下面。

$array = explode("_", $string);
if($array[0] == "bla") array_shift($array);
$string = implode("_", $array);

答案 4 :(得分:0)

<?php
$str = 'bla_string_bla_bla_bla';
echo preg_replace('/bla_/', '', $str, 1); 
?>

答案 5 :(得分:0)

我认为substr_replace可以执行您想要的操作,您可以将替换限制为字符串的一部分: http://nl3.php.net/manual/en/function.substr-replace.php(这将使您只能查看字符串的开头。)

您可以使用str_replace(http://nl3.php.net/manual/en/function.str-replace.php)的count参数,这将允许您从左侧开始限制替换次数,但不会强制它在开头。

答案 6 :(得分:0)

  

不错的速度,但这是硬编码的,取决于以_结尾的针。有通用版本吗? – toddmo 6月29日23:26

通用版本:

$parts = explode($start, $full, 2);
if ($parts[0] === '') {
    $end = $parts[1];
} else {
    $fail = true;
}

一些基准:

<?php

$iters = 100000;
$start = "/aaaaaaa/bbbbbbbbbb";
$full = "/aaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee";
$end = '';

$fail = false;

$t0 = microtime(true);
for ($i = 0; $i < $iters; $i++) {
    if (strpos($full, $start) === 0) {
        $end = substr($full, strlen($start));
    } else {
        $fail = true;
    }
}
$t = microtime(true) - $t0;
printf("%16s : %f s\n", "strpos+strlen", $t);

$t0 = microtime(true);
for ($i = 0; $i < $iters; $i++) {
    $parts = explode($start, $full, 2);
    if ($parts[0] === '') {
        $end = $parts[1];
    } else {
        $fail = true;
    }
}
$t = microtime(true) - $t0;
printf("%16s : %f s\n", "explode", $t);

在我的旧家用PC上:

$ php bench.php

输出:

   strpos+strlen : 0.158388 s
         explode : 0.126772 s

答案 7 :(得分:0)

这是更快的方法:

// strpos is faster than an unnecessary substr() and is built just for that 
if (strpos($str, $prefix) === 0) $str = substr($str, strlen($prefix));

答案 8 :(得分:0)

这将删除找到的第一个匹配项,即开始,中间或结尾。

$str = substr($str, 0, strpos($str, $prefix)).substr($str, strpos($str, $prefix)+strlen($prefix));

答案 9 :(得分:-5)

str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

现在可以做你想要的。

$str = "bla_string_bla_bla_bla";
str_replace("bla_","",$str,1);

答案 10 :(得分:-6)

删除www。从字符串的开头,这是最简单的方法(ltrim)

$a="www.google.com";
echo ltrim($a, "www.");