2009-12-24 22 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 2009-12-24 08:51:50

+0

我想,根据手动描述(RegexIterator :: REPLACE 替换当前条目或当前键),它应该返回所有可以替换的匹配keys =>值。手册中没有例子,所以目前还不清楚如何使用它以及在哪里定义替换模式。 – Alexey 2009-12-24 09:50:20

回答

1

如果ommit的操作模式(在新RegexIterator声明第三个参数),你会得到的匹配值,就像这样:

$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>'; 

你可以用不同的操作模式玩,这取决于你是什么想。请阅读setMode文档:http://www.php.net/manual/en/regexiterator.setmode.php

+0

但如果你添加$ regexIterator-> setMode(RegexIterator :: REPLACE); 它返回空迭代器(如问题的例子),所以,目前还不清楚如何使用REPLACE模式。 – Alexey 2009-12-24 09:55:39

+0

是的,我不能说我成功地使用了REPLACE模式。我会去与preg_replace .. – 2009-12-24 10:50:12

+1

Alexey,也许这是PHP中的错误?我有PHP5.3 – yegor256 2009-12-24 12:40:09

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