preg_match_all有回调吗?

时间:2015-01-05 23:23:39

标签: php string callback preg-match-all numeric

我有兴趣实时替换数字匹配并将它们操作为十六进制。

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

2 个答案:

答案 0 :(得分:6)

你想要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'作为回调。

答案 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);
});