preg_match_all с обратным вызовом?

Я заинтересован в замене числовых совпадений в реальном времени и манипулировании ими в шестнадцатеричном виде.

Мне было интересно, если это возможно без использования цикла 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});

4

Решение

Ты хочешь preg_replace_callback().

Вы бы сопоставить их с регулярным выражением, как /=\d+?;/ и тогда ваш обратный вызов будет выглядеть так …

function($matches) { return dechex($matches[1]); }

В сочетании это дает нам …

preg_replace_callback('/=(\d+?);/', function($matches) {
return dechex($matches[1]);
}, $str);

CodePad.

Кроме того, вы можете использовать положительный взгляд назад / вперед, чтобы сопоставить разделители, а затем передать 'dechex' прямо как обратный звонок.

6

Другие решения

Или вы могли бы использовать Инструмент T-Regx, что намного лучше! (автоматические разделители, исключения вместо предупреждений, более чистый API)

pattern('=(\d+?);')->replace($str)->group(1)->callback('dechex');

или если вы предпочитаете анонимную функцию

pattern('=(\d+?);')->replace($str)->group(1)->callback(function (Group $group) {
return dechex($group);
});
0