2012-03-13 13 views
5

str_replace() मैचों से "नाम" दो बार ": नाम: नाम_न" मैं केवल पूरे शब्द के लिए परिणाम मिलान करना चाहता हूं। मैं this answer की वजह से preg_replace() पर स्विच करना चाहता था।str_replace: पूरे शब्द से मिलान करें केवल

$str = ":Name :Name_en"; 
echo $str . chr(10); 
$str = preg_replace('/\b' . ':Name' . '\b/i', '"Test"', $str); 
echo $str; 

लेकिन यह पेट के की वजह से काम नहीं करता। कोई प्रतिस्थापन नहीं होता है। RegExp कैसा दिखता है?

\b शब्द सीमा है। लेकिन मुझे लगता है कि एक कोलन ऐसी शब्द सीमा से संबंधित नहीं है। अपने PHP 5 + आप अभी भी str_replace उपयोग कर सकते हैं का उपयोग कर

$str = preg_replace('/:Name\b/i', '"Test"', $str); 
+2

आपको सबसे पहले हमें यह बताना होगा कि "शब्द" की आपकी * परिभाषा क्या है। – Jon

+0

मेरे पूरे शब्द के लिए 'नाम', ': Name_en' और इसी तरह है। RegExp के लिए मुझे नहीं पता। – testing

+0

यह परिभाषा नहीं है, यह एक उदाहरण है। – Jon

उत्तर

9

आप अपने स्ट्रिंग की शुरुआत पर शब्द सीमा की जरूरत नहीं है।

$str = ":Name :Name_en"; 
echo $str . chr(10); 

// The final int limits the function to a single replace. 
$str = str_replace(':Name', '"Test"', $str, 1); 

echo $str; 
+0

कभी-कभी यह इतना आसान है। क्या आपके पास एक अच्छा लिंक है जहां RegExp '/', '\ b','/i' की तरह आसानी से समझाया गया है? – testing

+0

ऑफ-हाथ नहीं :) मैंने सोचा था कि php.net प्रलेखन बहुत अच्छा था – Evert

+0

उन लोगों के लिए जो एक अच्छा लिंक ढूंढ रहे हैं - http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ – Styphon

1

:

+0

लेकिन कौन सा आइटम क्या यह बदलता है? पहला, आखिरी वाला, ...? मेरे आवेदन में यह हो सकता है कि यह परिवर्तन ... – testing

+1

पहला वाला। str_replace अनुक्रमिक है। – Bradmage

+1

ऐसा प्रतीत नहीं होता है कि प्रलेखन कहता है: 'गिनती: यदि पास हो जाती है, तो इसे प्रतिस्थापित किए गए प्रतिस्थापन की संख्या पर सेट किया जाएगा।'। तो यह एक चर संदर्भ है, स्थिर – jokkedk

1

यदि आपके कई कीवर्ड एक साहचर्य, एक शब्दकोश या प्लेसहोल्डर की तरह कुछ कर रहे हैं बदलना चाहते हैं, तो आप अपने regex प्रतिमान से मेल खाने के लिए इसका उपयोग कर सकते हैं:

$words=array("_saudation_"=>"Hello", "_animal_"=>"cat", "_animal_sound_"=>"MEooow"); 
$source=" _saudation_! My Animal is a _animal_ and it says _animal_sound_ , _no_match_"; 

echo (preg_replace_callback("/\b_(\w*)_\b/", function($match) use ($words) { if(isset($words[$match[0]])){ 
return ($words[$match[0]]);}else{ return($match[0]);}}, $source)); 

रिटर्न: नमस्कार! मेरा पशु एक बिल्ली है और यह MEooow, _no_match_

नोटिस, हालांकि "_no_match_" में अनुवाद की कमी है, यह regex के दौरान मेल खाएगा, लेकिन इसकी कुंजी को सुरक्षित रखेगा।

+0

यह विभिन्न कुंजी के साथ एकाधिक प्रतिस्थापन की अनुमति देता है – Miguel

संबंधित मुद्दे