PHP

2009-09-09 9 views
8

Ummm में preg_replace में $ चर का उपयोग कर ... मैं preg_replace पर कॉल में चर का उपयोग कैसे करूं?PHP

यह काम नहीं किया:

foreach($numarray as $num => $text) 
    { 
     $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/'; 
     $replacements[] = '<ces>$1<$text/>$2</ces>'; 
    } 

हाँ, $num धन चिह्न द्वारा preceeded है। हां, मैं "tag the $num as <$text/>" चाहता हूं।

उत्तर

12

आपका प्रतिस्थापन पैटर्न ठीक दिखता है, लेकिन जैसा कि आपने मिलान पैटर्न में एकल उद्धरण का उपयोग किया है, तो आपके $ num चर को इसमें डाला नहीं जाएगा। इसके बजाय, कोशिश

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

भी ध्यान रखें कि जब इस तरह "अज्ञात" आदानों से एक पैटर्न का निर्माण, यह आमतौर पर एक अच्छा विचार preg_quote उपयोग करने के लिए है। जैसे

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/'; 

हालांकि मुझे लगता है कि परिवर्तनीय नाम दिया गया है यह आपके मामले में हमेशा संख्यात्मक है।

+0

धन्यवाद गम्बो, पॉल - आपके इनपुट दोनों ने मदद की! – Steve

12

चर केवल strings declared with double quotes में विस्तारित किए जाएंगे।

$patterns[]  = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/"; 
$replacements[] = "<ces>$1<$text/>$2</ces>"; 

या उपयोग स्ट्रिंग संयोजन:: तो या तो दोहरे उद्धरण चिह्नों का उपयोग

$patterns[]  = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

तुम भी preg_quote पर एक नज़र डालें, तो अपने चर नियमित अभिव्यक्ति मेटा वर्ण हो सकते हैं चाहिए।

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