जवाबों:
सादा रूप, बिना रेगेक्स:
$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';
if (substr($str, 0, strlen($prefix)) == $prefix) {
$str = substr($str, strlen($prefix));
}
लेता है: 0.0369 एमएस (0.000,036,954 सेकंड)
और साथ:
$prefix = 'bla_';
$str = 'bla_string_bla_bla_bla';
$str = preg_replace('/^' . preg_quote($prefix, '/') . '/', '', $str);
लेता है: 0.1749 एमएस (0.000,174,999 सेकंड) के बाद 1 रन (संकलन), और 0.0510 एमएस (0.000,051,021 सेकंड)।
मेरे सर्वर पर, जाहिर है।
if(condition) { statement }इतना अधिक स्पष्ट होता।
if (substr($str, 0, strlen($prefix)) == $prefix) if (0 === strpos($str, $prefix))उसी पठनीयता को बनाए रखते हुए अनावश्यक मेमोरी आवंटन से बचने के लिए बदला जा सकता है :)
आप कैरट सिंबल ( ^) के साथ रेग्युलर एक्सप्रेशंस का उपयोग कर सकते हैं जो स्ट्रिंग की शुरुआत में मैच को एंकर करता है:
$str = preg_replace('/^bla_/', '', $str);
substr()संस्करण की तुलना में तेजी से काम करता है ... मुझे लगता है कि यह करता है, और उचित उत्तर के रूप में चिह्नित किया जाना चाहिए।
preg_quote
multibyteदुःस्वप्न अन्य समाधानों के साथ एक और मुद्दा है जबकि यह अच्छी तरह से काम करता है यदि फ़ाइल की एन्कोडिंग सही है। वैसे भी, यह इस सवाल के दायरे में नहीं होना चाहिए ताकि मुझे परवाह न हो।
substrऔर strposएक सरणी स्वीकार नहीं कर सकते। अगर आप किसी ऐरे से काम कर रहे हैं, तो आप निश्चित प्रदर्शन हासिल करते हैं। चीयर्स!
function remove_prefix($text, $prefix) {
if(0 === strpos($text, $prefix))
$text = substr($text, strlen($prefix)).'';
return $text;
}
.''जरूरत नहीं है।
(substr($str, 0, strlen($prefix)) == $prefix)स्वीकृत उत्तर से अधिक पसंद किया गया ।37
यहाँ।
$array = explode("_", $string);
if($array[0] == "bla") array_shift($array);
$string = implode("_", $array);
_। क्या कोई सामान्य संस्करण है?
मुझे लगता है कि substr_replace आप क्या चाहते हैं, जहां आप अपनी स्ट्रिंग के भाग के लिए अपनी जगह को सीमित कर सकते हैं: http://nl3.php.net/manual/en/function.substr-replace.php (यह आपको केवल देखने के लिए सक्षम करेगा) स्ट्रिंग की शुरुआत।)
आप str_replace ( http://nl3.php.net/manual/en/function.str-replace.php ) की गणना पैरामीटर का उपयोग कर सकते हैं , यह आपको बाईं ओर से शुरू होने वाले प्रतिस्थापन की संख्या को सीमित करने की अनुमति देगा, लेकिन यह इसे शुरू में लागू नहीं किया जाएगा।
substr_replaceदिए गए रेंज में वर्णों को प्रतिस्थापित करेगा चाहे वे उपसर्ग हों जिन्हें आप हटाना चाहते हैं या कुछ और। ओपी bla_"केवल तभी निकालना चाहता है जब वह स्ट्रिंग की शुरुआत में पाया जाता है।"
अच्छी गति है, लेकिन यह _ के साथ समाप्त होने वाली सुई पर निर्भर करने के लिए कठिन-कोडित है। क्या कोई सामान्य संस्करण है? - टोडरमो जून 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);
मेरे काफी पुराने होम पीसी पर:
$ php bench.php
आउटपुट:
strpos+strlen : 0.158388 s
explode : 0.126772 s
यहाँ एक और भी तेज़ तरीका है:
// strpos is faster than an unnecessary substr() and is built just for that
if (strpos($str, $prefix) === 0) $str = substr($str, strlen($prefix));
यह जहाँ भी पाया जाता है, पहले, शुरू या मध्य या अंत में पहले मैच को हटा देगा।
$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 ] )
अब तुम क्या चाहते हो
$str = "bla_string_bla_bla_bla";
str_replace("bla_","",$str,1);
str_replace()समारोह के $countपैरामीटर एक चर संदर्भ द्वारा पारित प्रतिस्थापन की संख्या मिला, जिसमें होने की उम्मीद है, प्रतिस्थापन की संख्या सीमित न।
निकालें www। स्ट्रिंग की शुरुआत से, यह सबसे आसान तरीका है (ltrim)
$a="www.google.com";
echo ltrim($a, "www.");
ltrim($a, "w.");कार्य केवल तभी करेगा जब डोमेन "w" से शुरू नहीं होगा। ltrim ('m.google.com', ".omg")में परिणाम le.com।
ltrim, यह गलत तरीके से उपयोग किया जाता है। दूसरा पैरामीटर वर्णों की एक सूची है जिसे ट्रिम किया जाना चाहिए; इसलिए एक एकल "w."पर्याप्त होगा।
s($str)->replacePrefix('_bla')मदद मिल सकती है , जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है ।