【问题标题】:Preg replace in preg replace callbackPreg 替换回调中的 Preg 替换
【发布时间】:2017-01-05 18:39:49
【问题描述】:

如何更改以下代码 preg_replace(在 PHP 5.6 中已弃用):

$ Encoded = preg_replace ('/ ([\ 000- \ 011 \ 013 \ 014 \ 016- \ 037 \ 075 \ 077 \ 137 \ 177- \ 377]) / and',                "'='. Sprintf ('% 02X', ord ('\\ 1'))", $ encoded);

preg_replace_callback?

【问题讨论】:

  • 能否正确格式化?还请提供一个示例字符串。
  • 试试$encoded = preg_replace_callback('/([\000-\011\013\014\016-\037\075\077\137\177-\377])\/and/', function($m) { return '='. sprintf('%02X', ord($m[1])); }, $encoded);
  • 优秀的 Wiktor,现在看起来一切正常。非常感谢!

标签: php regex preg-replace


【解决方案1】:

你可以像这样使用preg_replace_callback

$re = '/([\000-\011\013\014\016-\037\075\077‌​\137\177-\377])\/and‌​/';
$encoded = preg_replace_callback($re, function($m) { 
     return '='. sprintf('%02X', ord($m[1])); 
}, $encoded);

其中$m 是匹配对象,其中包含您可以通过索引访问的匹配和可选捕获。例如。 $m[1] 是捕获组 #1 的值(即 ([\000-\011\013\014\016-\037\075\077‌​\137\177-\377]) 子模式的值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多