preg_match_all 有回调?

preg_match_all with callback?

我对实时替换数字匹配项并将其处理为十六进制感兴趣。

我想知道是否可以不使用 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);

CodePad.

或者,您可以使用正 lookbehind/forward 来匹配定界符,然后直接传递 'dechex' 作为回调。

或者您可以使用 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);
});