2012-03-07 11 views
18

मैं खोज और php में दूसरे के साथ पहला शब्द बदलना चाहते से स्ट्रिंग की पहली आवृत्ति को बदल दें:php 0 स्थिति

$str="nothing inside"; 

खोज से 'कुछ' करने के लिए 'कुछ भी नहीं' बदलें और का उपयोग किए बिना की जगह substr

उत्पादन किया जाना चाहिए: 'कुछ अंदर'

+0

बिना सबस्ट्र के क्यों? – lfxgroove

+1

संभव डुप्लिकेट [str \ _replace का उपयोग करके ताकि यह केवल पहले मैच पर कार्य करे?] (Http://stackoverflow.com/questions/1252693/using-str-replace-so-that-it-only-acts-on -थ-प्रथम-मैच) – Bas

उत्तर

35

उपयोग preg_replace():

preg_replace('/nothing/', 'something', $str, 1); 

आप के लिए खोज करना चाहते हैं जो कुछ भी तार के साथ नियमित अभिव्यक्ति /nothing/ बदलें। चूंकि नियमित अभिव्यक्तियों का हमेशा मूल्यांकन किया जाता है, यह हमेशा पहले उदाहरण से मेल खाता है।

+3

यदि आप केवल सामान्य तारों का उपयोग कर रहे हैं, जैसे कि $ और स्ट्रिंग के भीतर हैं तो यह समाधान समस्या से बच रहा है। http://stackoverflow.com/questions/1252693/php-str-replace-that-only-acts-on-the-first-match का एक और सामान्य समाधान है। – Anther

0

This function str_replace एक आप के लिए देख रहे हैं। 1 की एक सीमा के साथ

+6

कि चौथा पैरामीटर प्रतिस्थापित किए गए प्रतिस्थापनों की गणना करता है, प्रतिस्थापन को – mishu

+0

पर सीमित नहीं करता है आप सही हैं। मेरा जवाब संपादित करेंगे। – steveoh

+0

@steveoh: str_replace सभी घटनाओं को प्रतिस्थापित करता है, लेकिन मुझे केवल पहली घटना चाहिए यदि यह प्रारंभ में मौजूद है जैसे ltrim फ़ंक्शन केवल प्रथम स्थान को हटा दें। – Ben

2
preg_replace('/nothing/', 'something', $str, 1); 
+0

यह सभी घटनाओं को प्रतिस्थापित करेगा। preg_replace ('/ OR /', '', $ str, 1) 'OR' की पहली घटना को प्रतिस्थापित करता है लेकिन न केवल प्रमुख घटना – Ben

3

कोशिश इस

preg_replace('/^[a-zA-Z]\s/', 'ReplacementWord ', $string) 

उसके द्वारा पहले सफेद स्थान तक शुरू से ही कुछ भी का चयन करें और replcementWord साथ बदलें। प्रतिलिपि के बाद एक जगह नोटिसवर्ड। इस वजह से हम str_replace (http://php.net/manual/en/function.str-replace.php) के लिए आदमी पृष्ठ पर खोज स्ट्रिंग

+0

मुझे भी regEx पर इतना अच्छा नहीं है। आप इस लिंक को आजमा सकते हैं [तो आप नियमित अभिव्यक्ति सीखना चाहते हैं?] (http://www.stedee.id.au/Learn_Regular_Expressions) –

+0

क्षमा करें, लेकिन मैं इसे ठीक से प्रारूपित नहीं कर सकता –

10

में \s जोड़ा तो आप इस समारोह पा सकते हैं

function str_replace_once($str_pattern, $str_replacement, $string){ 

    if (strpos($string, $str_pattern) !== false){ 
     $occurrence = strpos($string, $str_pattern); 
     return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern)); 
    } 

    return $string; 
} 

उपयोग नमूना: http://codepad.org/JqUspMPx

+0

preg_replace ('/ search /', 'replace', $ str, 1) जैसा ही है; – Ben

+2

@ बेन फ़ंक्शन समान हैं, लेकिन निश्चित रूप से वही नहीं हैं। यदि आप किसी ऐसे वर्ण का उपयोग करते हैं जिसे नियमित अभिव्यक्ति से बचने की आवश्यकता है, तो यदि आप preg_replace का उपयोग करते हैं तो आपको अप्रत्याशित त्रुटियां मिलेंगी। – Anther

+0

@ मिशु पूरे दिन बर्बाद हो गया और फिर मुझे आपका जवाब मिला, धन्यवाद दोस्त। –

-1

ltrim() एक स्ट्रिंग की शुरुआत में अवांछित पाठ को हटा देगा।

$do = 'nothing'; // what you want 
$dont = 'something'; // what you dont want 
$str = 'something inside'; 
$newstr = $do.ltrim($str , $dont); 
echo $newstr.'<br>'; 
+0

ltrim() दिए गए सूची में सभी वर्ण हटा देता है, न कि वर्णों का अनुक्रम। कृपया अपना उत्तर अपडेट करें। – Calin

0

मैं इस मुद्दे पर भाग गया और एक समाधान चाहता था और इस करता है, तो स्ट्रिंग $str = "mine'this की तरह था, appostrophe एक समस्या कर लेंगे मेरे लिए 100% सही नहीं था।

$stick=''; 
$cook = explode($str,$cookie,2); 
     foreach($cook as $c){ 
      if(preg_match("/^'/", $c)||preg_match('/^"/', $c)){ 
       //we have 's dsf fds... so we need to find the first |sess| because it is the delimiter' 
       $stick = '|sess|'.explode('|sess|',$c,2)[1]; 
      }else{ 
       $stick = $c; 
      } 
      $cookies.=$stick; 
     } 
0

सघनता और अभिनय के लिए सबसे अच्छा यह नहीं है: तो मैं से थोड़ा अधिक चाल के साथ आया था?

if(($offset=strpos($string,$replaced))!==false){ 
    $string=substr_replace($replaced,$replacer,$offset,strlen($replaced)); 
} 
संबंधित मुद्दे