किसी को भी एक स्ट्रिंग में एक और स्ट्रिंग के साथ एक स्ट्रिंग की अंतिम घटना को बदलने के लिए बहुत तेज़ तरीके से पता है?
किसी को भी एक स्ट्रिंग में एक और स्ट्रिंग के साथ एक स्ट्रिंग की अंतिम घटना को बदलने के लिए बहुत तेज़ तरीके से पता है?
जवाबों:
आप इस फ़ंक्शन का उपयोग कर सकते हैं:
function str_lreplace($search, $replace, $subject)
{
$pos = strrpos($subject, $search);
if($pos !== false)
{
$subject = substr_replace($subject, $replace, $pos, strlen($search));
}
return $subject;
}
TRUEकोई बात नहीं क्या वापस नहीं करता है । यह एक स्ट्रिंग देता है, चाहे जो भी हो। यदि कोई प्रतिस्थापन नहीं किया जा सकता है तो यह मूल रिटर्न देता है $subject, जैसे substr_replace और str_replaceकरते हैं।
strpos — Find the position of the first occurrence of a substring in a string- संपादित करें: वाह। Php प्रतिभाओं ने वास्तव में एक समारोह बुलाया strposऔर strrpos? धन्यवाद ....
एक और 1-लाइनर लेकिन बिना प्रीग:
$subject = 'bourbon, scotch, beer';
$search = ',';
$replace = ', and';
echo strrev(implode(strrev($replace), explode(strrev($search), strrev($subject), 2))); //output: bourbon, scotch, and beer
$string = 'this is my world, not my world';
$find = 'world';
$replace = 'farm';
$result = preg_replace(strrev("/$find/"),strrev($replace),strrev($string),1);
echo strrev($result); //output: this is my world, not my farm
निम्नलिखित बल्कि कॉम्पैक्ट समाधान ब्याज की सबस्ट्रिंग की अंतिम घटना से मेल करने के लिए PCRE पॉजिटिव लुकहैड एश्योरेंस का उपयोग करता है , अर्थात, सबस्ट्रिंग की एक घटना जो उसी प्रतिस्थापन के किसी भी अन्य घटना के बाद नहीं होती है। इस प्रकार उदाहरण के last 'fox'साथ बदल देता है 'dog'।
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!';
echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
उत्पादन:
The quick brown fox, fox, fox jumps over the lazy dog!!!
$string = 'The quick brown fox, fox, fox jumps over the lazy fox!!!'; echo preg_replace('/(fox(?!.*fox))/', 'dog', $string);
आप ऐसा कर सकते हैं:
$str = 'Hello world';
$str = rtrim($str, 'world') . 'John';
परिणाम 'हैलो जॉन' है;
सादर
rtrimआप जिस तरह से सोच रहे हैं वैसा व्यवहार नहीं करता है। यह किसी भी क्रम में खोज स्ट्रिंग में मौजूद किसी भी वर्ण (और हमेशा प्रतिस्थापन को जोड़ देगा) से पट्टी करेगा, उदाहरण के लिए "हैलो शब्द" -> "हैलो जॉन", "हैलो भगवान" -> "हैलो जॉन", "हैलो मोटर "->" हैलो मोटजन "," हैलो दुनियादार "->" हैलो दुनियाजोन "।
यह भी काम करेगा:
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '(.*?)~', '$1' . $replace . '$2', $subject, 1);
}
अद्यतन थोड़ा अधिक संक्षिप्त संस्करण ( http://ideone.com/B8i4o ):
function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
यह एक प्राचीन प्रश्न है, लेकिन हर कोई सरलतम रीजैक्स-आधारित समाधान की अनदेखी क्यों कर रहा है? सामान्य regexp quantifiers लालची हैं, लोग! यदि आप किसी पैटर्न के अंतिम उदाहरण को ढूंढना चाहते हैं, तो बस उसके .*सामने चिपके रहें । ऐसे:
$text = "The quick brown fox, fox, fox, fox, jumps over etc.";
$fixed = preg_replace("((.*)fox)", "$1DUCK", $text);
print($fixed);
यह "लोमड़ी" के अंतिम उदाहरण को "DUCK" में बदल देगा, जैसे कि यह माना जाता है, और प्रिंट करें:
The quick brown fox, fox, fox, DUCK, jumps over etc.
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
if($findChar !== FALSE) {
$string[$findChar]=".";
}
echo $string;
कोड में गलतियों के अलावा, फ़ारुक उनल के पास सबसे अच्छा अन्वेषक है। एक फ़ंक्शन ट्रिक करता है।
अंतिम मैच खोजने के लिए आप स्ट्रैप () का उपयोग कर सकते हैं।
$string = "picture_0007_value";
$findChar =strrpos($string,"_");
$string[$findChar]=".";
echo $string;
आउटपुट: picture_0007.value
एक छोटा संस्करण:
$NewString = substr_replace($String,$Replacement,strrpos($String,$Replace),strlen($Replace));
स्ट्रिंग के अंत से मेल खाने के लिए एक reg अभिव्यक्ति पर "$" का उपयोग करें
$string = 'The quick brown fox jumps over the lazy fox';
echo preg_replace('/fox$/', 'dog', $string);
//output
'The quick brown fox jumps over the lazy dog'
रुचि के लिए: मैंने एक फ़ंक्शन लिखा है जो preg_match का उपयोग करता है ताकि आप regex का उपयोग करके दाहिने हाथ की ओर से बदल सकें।
function preg_rreplace($search, $replace, $subject) {
preg_match_all($search, $subject, $matches, PREG_SET_ORDER);
$lastMatch = end($matches);
if ($lastMatch && false !== $pos = strrpos($subject, $lastMatchedStr = $lastMatch[0])) {
$subject = substr_replace($subject, $replace, $pos, strlen($lastMatchedStr));
}
return $subject;
}
या दोनों विकल्पों के शॉर्टहैंड संयोजन / कार्यान्वयन के रूप में:
function str_rreplace($search, $replace, $subject) {
return (false !== $pos = strrpos($subject, $search)) ?
substr_replace($subject, $replace, $pos, strlen($search)) : $subject;
}
function preg_rreplace($search, $replace, $subject) {
preg_match_all($search, $subject, $matches, PREG_SET_ORDER);
return ($lastMatch = end($matches)) ? str_rreplace($lastMatch[0], $replace, $subject) : $subject;
}
https://stackoverflow.com/a/3835653/3017716 और https://stackoverflow.com/a/23343396/3017716 पर आधारित
s($str)->replaceLast($search, $replace)मदद मिल सकती है , जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है ।