开发者社区 问答 正文

PHP正则替换第一位为0,被忽略 ,为什么?

`$subject = '0300020F005176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D';
echo preg_replace('/^(w{8})w{2}/i','$1'.'08',$subject);`
// 输出结果:85176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D
// 期望结果:0300020F085176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D
// 但是:preg_replace('regex','$1'.'__',$subject); 这样是没有问题的

展开
收起
落地花开啦 2016-06-13 18:24:02 2350 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    当在替换模式下工作并且后向引用后面紧跟着需要是另外一个数字(比如:在一个匹配模式后紧接着增加一个原文数字), 不能使用1这样的语法来描述后向引用。比如, 11将会使 preg_replace() 不能理解你希望的是一个1后向引用紧跟一个原文1,还是 一个11后向引用后面不跟任何东西。 这种情况下解决方案是使用${1}1。 这创建了一个独立的$1后向引用, 一个独立的原文1。

    你的替换部分是“$108”,所以这里的需要将$1替换为${1}以免混淆.

    <?php
    $subject = '0300020F005176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D';
    echo preg_replace('/^(\w{8})\w{2}/i','${1}08',$subject);
    2019-07-17 19:36:44
    赞同 展开评论
问答分类:
PHP
问答标签:
问答地址: