Я заинтересован в замене числовых совпадений в реальном времени и манипулировании ими в шестнадцатеричном виде.
Мне было интересно, если это возможно без использования цикла foreach.
итак …
каждая вещь между:
=
{числовое значение} ;
будет управляться с целью:
=
{шестнадцатеричное числовое значение} ;
preg_match_all('/\=[0-9]\;/',$src,$matches);
Есть ли какой-либо обратный вызов preg_match_all, так что вместо того, чтобы потом предварительно создавать цикл, я могу манипулировать ими, как только preg_match_all перехватывает каждое совпадение (в реальном времени).
это неправильный синтаксис, но вы можете понять:
preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Ты хочешь preg_replace_callback()
.
Вы бы сопоставить их с регулярным выражением, как /=\d+?;/
и тогда ваш обратный вызов будет выглядеть так …
function($matches) { return dechex($matches[1]); }
В сочетании это дает нам …
preg_replace_callback('/=(\d+?);/', function($matches) {
return dechex($matches[1]);
}, $str);
Кроме того, вы можете использовать положительный взгляд назад / вперед, чтобы сопоставить разделители, а затем передать 'dechex'
прямо как обратный звонок.
Или вы могли бы использовать Инструмент T-Regx, что намного лучше! (автоматические разделители, исключения вместо предупреждений, более чистый API)
pattern('=(\d+?);')->replace($str)->group(1)->callback('dechex');
или если вы предпочитаете анонимную функцию
pattern('=(\d+?);')->replace($str)->group(1)->callback(function (Group $group) {
return dechex($group);
});