preg_match_all如何使用回调函数?

7

我希望可以实时替换数字匹配并将其转换为十六进制,相关内容与IT技术有关。请问是否可以在不使用foreach循环的情况下实现。

也就是说...

介于以下内容之间的所有内容:

= {数字值} ;

将会被转化为:

= {十六进制数字值} ;

preg_match_all('/\=[0-9]\;/',$src,$matches);

preg_match_all有没有回调函数,以便在它捕获每个匹配项时即时进行操作,而不是之后执行循环来操作结果。

这不是正确的语法,只是为了让您了解这个想法:

preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
2个回答

7
你想要使用preg_replace_callback()
你可以使用正则表达式/=\d+?;/进行匹配,然后你的回调函数会像这样...
function($matches) { return dechex($matches[1]); }

综合起来,它为我们提供了...
preg_replace_callback('/=(\d+?);/', function($matches) { 
   return dechex($matches[1]);
}, $str);

CodePad

或者,您可以使用正向和反向前瞻来匹配分隔符,然后直接将'dechex'作为回调函数传递。


1
或者您可以使用T-Regx工具,它更好!(自动分隔符,异常而不是警告,更清晰的API)
pattern('=(\d+?);')->replace($str)->group(1)->callback('dechex');

或者,如果您更喜欢匿名函数。
pattern('=(\d+?);')->replace($str)->group(1)->callback(function (Group $group) {
    return dechex($group);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接