Jawaban:
Bentuk polos, tanpa regex:
$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';
if (substr($str, 0, strlen($prefix)) == $prefix) {
$str = substr($str, strlen($prefix));
}
Membawa: 0,0369 ms (0,000,036,954 detik)
Dan dengan:
$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';
$str = preg_replace('/^' . preg_quote($prefix, '/') . '/', '', $str);
Membawa: 0,1749 ms (0,000,174,999 detik) run pertama (kompilasi), dan 0,0510 ms (0,000,051,021 detik) setelahnya.
Diprofilkan di server saya, jelas.
if(condition) { statement }
akan jauh lebih jelas.
if (substr($str, 0, strlen($prefix)) == $prefix)
dapat diubah untuk if (0 === strpos($str, $prefix))
menghindari alokasi memori yang tidak perlu sambil menjaga keterbacaan yang sama :)
Anda bisa menggunakan ekspresi reguler dengan simbol tanda sisipan ( ^
) yang mengaitkan kecocokan ke awal string:
$str = preg_replace('/^bla_/', '', $str);
substr()
versi ... Saya kira itu berhasil, dan harus ditandai sebagai jawaban yang tepat.
preg_quote
'd
multibyte
mimpi buruk adalah masalah lain dengan solusi lain sementara ini bekerja dengan baik jika penyandian file sudah benar. Bagaimanapun, itu seharusnya tidak berada dalam lingkup pertanyaan ini jadi saya tidak akan peduli.
substr
dan strpos
tidak dapat menerima array. Ini dia, keuntungan kinerja yang pasti jika Anda berurusan dengan sebuah array. Bersulang!
function remove_prefix($text, $prefix) {
if(0 === strpos($text, $prefix))
$text = substr($text, strlen($prefix)).'';
return $text;
}
.''
diperlukan.
(substr($str, 0, strlen($prefix)) == $prefix)
dari jawaban yang diterima lebih seperti
Sini.
$array = explode("_", $string);
if($array[0] == "bla") array_shift($array);
$string = implode("_", $array);
_
. Apakah ada versi umum?
Saya pikir substr_replace melakukan apa yang Anda inginkan, di mana Anda dapat membatasi penggantian Anda ke bagian dari string Anda: http://nl3.php.net/manual/en/function.substr-replace.php (Ini akan memungkinkan Anda untuk hanya melihat awal dari string.)
Anda dapat menggunakan parameter hitungan str_replace ( http://nl3.php.net/manual/en/function.str-replace.php ), ini akan memungkinkan Anda untuk membatasi jumlah penggantian, mulai dari kiri, tetapi tidak akan memberlakukannya di awal.
substr_replace
akan mengganti karakter dalam rentang yang diberikan terlepas dari apakah mereka awalan yang ingin Anda hapus atau sesuatu yang lain. OP ingin menghapus bla_
"hanya jika ditemukan di awal string."
Kecepatan bagus, tapi ini kode keras bergantung pada jarum yang diakhiri dengan _. Apakah ada versi umum? - toddmo 29 Jun pukul 23:26
Versi umum:
$parts = explode($start, $full, 2);
if ($parts[0] === '') {
$end = $parts[1];
} else {
$fail = true;
}
Beberapa tolok ukur:
<?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);
Di PC rumah saya yang cukup lama:
$ php bench.php
Output:
strpos+strlen : 0.158388 s
explode : 0.126772 s
Inilah pendekatan yang bahkan lebih cepat:
// strpos is faster than an unnecessary substr() and is built just for that
if (strpos($str, $prefix) === 0) $str = substr($str, strlen($prefix));
Ini akan menghapus kecocokan pertama di mana pun ia ditemukan yaitu, mulai atau tengah atau akhir.
$str = substr($str, 0, strpos($str, $prefix)).substr($str, strpos($str, $prefix)+strlen($prefix));
<?php
$str = 'bla_string_bla_bla_bla';
echo preg_replace('/bla_/', '', $str, 1);
?>
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
sekarang lakukan apa yang kamu mau.
$str = "bla_string_bla_bla_bla";
str_replace("bla_","",$str,1);
str_replace()
Fungsi ini $count
parameter diharapkan menjadi variabel dikirimkan dengan referensi mengandung jumlah pengganti ditemukan, tidak membatasi jumlah pengganti.
Hapus www. dari awal string, ini adalah cara termudah (ltrim)
$a="www.google.com";
echo ltrim($a, "www.");
ltrim($a, "w.");
akan melakukan pekerjaan hanya jika domain tidak akan memulai dengan "w". ltrim ('m.google.com', ".omg")
hasil dalam le.com
.
ltrim
, itu digunakan secara tidak benar. parameter kedua adalah daftar karakter yang harus dipangkas; karena itu satu "w."
saja sudah cukup.
s($str)->replacePrefix('_bla')
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .