165 votes

Supprimer une chaîne de caractères à partir du début d'une chaîne

J'ai une chaîne qui ressemble à ceci:

$str = "bla_string_bla_bla_bla";

Comment puis-je supprimer le premier bla_; mais seulement s'il se trouve au début de la chaîne?

Avec str_replace(), il supprime tous bla_'.

365voto

Fabio Points 1854

Forme ordinaire, sans regex:

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

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

Prend: 0.0369 ms (0.000,036,954 secondes)

Et avec:

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

Prend: 0.1749 ms (0.000,174,999 secondes) la 1ère (la compilation), et 0.0510 ms (0.000,051,021 secondes) après.

Profilé sur mon serveur, évidemment.

70voto

Tatu Ulmanen Points 52098

Vous pouvez utiliser des expressions régulières avec l'accent circonflexe (^) qui ancre le match au début de la chaîne:

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

23voto

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

5voto

cbrandolino Points 2983

Ici.

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

-2voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X