preg_match_all有回调吗?

ipr*_*esy 6 php string numeric callback preg-match-all

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

我很想知道是否可以不使用foreach循环.

所以...

两者之间的一切 :

= {数值} ;

将被归为:

= {十六进制数值} ;

preg_match_all('/\=[0-9]\;/',$src,$matches);
Run Code Online (Sandbox Code Playgroud)

是否有任何回调preg_match_all所以不是预先形成一个循环,我可以在preg_match_all捕获每个匹配(实时)时立即操作它们.

这不是正确的语法,但你可以得到这个想法:

preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 6

你想要的preg_replace_callback().

你可以将它们与正则表达式匹配/=\d+?;/,然后你的回调看起来像......

function($matches) { return dechex($matches[1]); }
Run Code Online (Sandbox Code Playgroud)

结合起来,它给了我们......

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

CodePad.

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