2009-12-24 8 views
5

क्या मेरी कोड में गलत है:RegexIterator :: REPLACE मोड के साथ कैसे काम करें?

$i = new RegexIterator(
    new ArrayIterator(array(
    'test1'=>'test888', 
    'test2'=>'what?', 
    'test3'=>'test999')), 
    '/^test(.*)/', 
    RegexIterator::REPLACE); 

foreach ($i as $name=>$value) 
    echo $name . '=>' . $value . "\n"; 

इटरेटर रिक्त है, क्यों? आपकी सहायताके लिए धन्यवाद!

+1

पर विचार कृपया हमें/अपने लक्ष्य के बारे में और अधिक बता आप क्या हासिल करना चाहते हैं। आपके उदाहरण कोड के लिए अपेक्षित परिणाम एक अच्छा प्रारंभिक बिंदु होगा। – VolkerK

+0

मुझे लगता है कि मैन्युअल विवरण के अनुसार (RegexIterator :: REPLACE वर्तमान प्रविष्टि या वर्तमान कुंजी को बदलें), कि इसे सभी मिलान की गई कुंजी => मानों को प्रतिस्थापित किया जाना चाहिए जिन्हें प्रतिस्थापित किया जा सकता है। मैन्युअल में कोई उदाहरण नहीं हैं, इसलिए, यह स्पष्ट नहीं है कि इसका उपयोग कैसे करें और प्रतिस्थापन पैटर्न को परिभाषित करने के लिए कहां करें। – Alexey

उत्तर

1

आप आपरेशन मोड (अपने नए RegexIterator बयान में 3 पैरामीटर) तुम इतनी तरह, मिलान मूल्यों मिलेगा ommit हैं:

$array = array('test1' => 'test888', 'test2' => 'what?', 'test3' => 'test999'); 
$pattern = '/^test(.*)/'; 

echo '<pre>'; 
echo "DEFAULT\n"; 
$arrayIterator = new ArrayIterator($array); 
$regexIterator = new RegexIterator($arrayIterator, $pattern); 
foreach ($regexIterator as $value) {echo "$value\n";} 
echo '</pre>'; 

आप जो के आधार पर, विभिन्न ऑपरेशन मोड के साथ खेल सकते हैं चाहते हैं। सेटमोड दस्तावेज़ पर पढ़ें: http://www.php.net/manual/en/regexiterator.setmode.php

+0

लेकिन यदि आप $ regexIterator-> setMode (RegexIterator :: REPLACE) जोड़ते हैं; यह खाली इटरेटर (जैसा कि प्रश्न के उदाहरण में) देता है, इसलिए, यह अभी भी अस्पष्ट है कि रीप्लेस मोड का उपयोग कैसे करें। – Alexey

+0

हां, मैं नहीं कह सकता कि मैंने सफलता के साथ रीप्लेस मोड का उपयोग किया है। मैं preg_replace के साथ जाऊंगा .. –

+1

एलेक्सी, शायद यह PHP में एक बग है? मेरे पास PHP5.3 – yegor256

0

निम्नलिखित कोड

$mixedArray=array(
    'tester2', 
    'tes1', 
    'bad4', 
    '2good2', 
    '2birds', 
    'birds8', 
    '8young girls', 
    '6 young boys' 
); 


$ait=new ArrayIterator($mixedArray); 
$regexIt=new RegexIterator($ait,'/^(\d+)(\w+)/', RegexIterator::REPLACE); 
$regexIt->replacement='$2:$1'; 

foreach($regexIt as $key=>$value){ 
    echo $value."<br>"; 
} 

आउटपुट

good2:2 
birds:2 
young:8 girls 
संबंधित मुद्दे