PHP正则替换第一位为0。被忽略

WBOY
发布: 2016-06-06 20:50:23
原创
1245 人浏览过

<code class="lang-php">$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);  这样是没有问题的
</code>
登录后复制
登录后复制

回复内容:

<code class="lang-php">$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);  这样是没有问题的
</code>
登录后复制
登录后复制

引自PHP手册preg_replace函数对后向引用的描述:preg_replace

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

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

<code><?php $subject = '0300020F005176C5A11A730004F955A2A20CD8-367C-EC5B-9D8C-2CAA0B8FE45D';
echo preg_replace('/^(\w{8})\w{2}/i','${1}08',$subject);
</code></code>
登录后复制

<code>echo preg_replace_callback('/^(\w{8})(\w{2})/i',create_function(
        // single quotes are essential here,
        // or alternative escape all $ as \$
        '$matches',
        'return $matches[1].\'08\';'
    ),$subject);
</code>
登录后复制

这样,callback处理

相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板