RegexIterator::REPLACE モードを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1957069

  •  21-09-2019
  •  | 
  •  

質問

私のコードの何が間違っているのか:

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

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

イテレータが空です。なぜですか?ご協力いただきありがとうございます!

役に立ちましたか?

解決 2

のように、それはPHPのバグだ、すでに述べました。 http://bugs.php.net/bug:私はphp.netにそれを報告しました。 PHP?ID = 50579

他のヒント

あなたは(あなたの新しい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>';

あなたが欲しいものに応じて、異なる動作モードで遊ぶことができます。 GoはSETMODEのドキュメントをよく読んで: http://www.php.net/マニュアル/ EN / regexiterator.setmode.php

次のコードを考えてみましょう

$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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top