PHP正則替換第一位為0。被忽略

來源:互聯網
上載者:User
$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);  這樣是沒有問題的

回複內容:

$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);  這樣是沒有問題的

引自PHP手冊preg_replace函數對後向引用的描述:preg_replace

當在替換模式下工作並且後向引用後面緊跟著需要是另外一個數字(比如:在一個匹配模式後緊接著增加一個原文數字), 不能使用\1這樣的文法來描述後向引用。比如, \11將會使 preg_replace() 不能理解你希望的是一個\1後向引用緊跟一個原文1,還是 一個\11後向引用後面不跟任何東西。 這種情況下解決方案是使用\${1}1。 這建立了一個獨立的$1後向引用, 一個獨立的原文1。

你的替換部分是“$108”,所以這裡的需要將$1替換為${1}以免混淆.

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);

這樣,callback處理

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.