我有兴趣实时替换数字匹配并将它们操作为十六进制。
我很想知道是否可以不使用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});
答案 0 :(得分:6)
您可以将它们与/=\d+?;/
等正则表达相匹配,然后您的回调看起来就像......
function($matches) { return dechex($matches[1]); }
结合起来,它给了我们......
preg_replace_callback('/=(\d+?);/', function($matches) {
return dechex($matches[1]);
}, $str);
或者,你可以使用正向lookbehind / forward来匹配分隔符,然后直接传递'dechex'
作为回调。
答案 1 :(得分:0)
或者您可以使用T-Regx tool,这要好得多! (自动定界符,异常而不是警告,更简洁的API)
pattern('=(\d+?);')->replace($str)->group(1)->callback('dechex');
或者您更喜欢匿名功能
pattern('=(\d+?);')->replace($str)->group(1)->callback(function (Group $group) {
return dechex($group);
});