public function testReplace() {
$post_xml_data='asdsa&(123123)';
// dd(preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $post_xml_data));
$subject = 'asdsa&(123123)<Macro Name="XXX_EN_AUDIO_CODEC_TYPE" Value="(XXX_EN_AUDIO_FEATURE_XXX<<0|XXX_EN_AUDIO_FEATURE_XXX<<1|XXX_EN_AUDIO_FEATURE_XXX<<2|XXX_EN_AUDIO_FEATURE_XXX<<3 |XXX_EN_AUDIO_FEATURE_XXX<<4|XXX_EN_AUDIO_FEATURE_XXX<<5|XXX_EN_AUDIO_FEATURE_XXX<<6|XXX_EN_AUDIO_FEATURE_XXX<<7 |XXX_EN_AUDIO_FEATURE_XXX<<8|XXX_EN_AUDIO_FEATURE_XXX<<9|XXX_EN_AUDIO_FEATURE_XXX<<10|XXX_EN_AUDIO_FEATURE_XXX<<16 |XXX_EN_AUDIO_FEATURE_XXX<<17)"/>
<Macro Name="XXX_EN_AUDIO_EFFECT_ITEM" Value="0"/>
<Macro Name="XXX_EN_AUDIO_FEATURE_XXX" Value="1"/>';
$new = preg_replace_callback('/(\([^\)]*\))/', function($matches){
dump($matches);
return str_replace(['<','>'], ['<','>'], $matches[0]);
}, $subject);
dd($new);
}
还有一个加强版的函数,接收一组正则作为键,回调函数作为值的批量替换:
$subject = 'Aaaaaa Bbb';
preg_replace_callback_array(
[
'~[a]+~i' => function ($match) {
echo strlen($match[0]), ' matches for "a" found', PHP_EOL;
},
'~[b]+~i' => function ($match) {
echo strlen($match[0]), ' matches for "b" found', PHP_EOL;
}
],
$subject
);