php
  • regex
  • 2011-10-30 104 views 2 likes 
    2

    我是新來的正則表達式,所以我需要你的幫助。 我需要的字符串替換8000 '"ts";s:4:"8000";s:2:"tr";s:3:"200"'簡單的正則表達式替換

    <?php 
    $txt = '"ts";s:4:"8000";s:2:"tr";s:3:"200"'; 
    $pattern = '#\"ts\"\;[a-z]{1}\:[0-9]{1}\:\"([0-9]*)#'; 
    $replacement = '7000'; 
    $txt = preg_replace($pattern,$replacement,$txt); 
    print($txt); 
    ?> 
    

    此代碼輸出7000";s:2:"tr";s:3:"200"這不是我所需要的。 我在這裏做錯了什麼?謝謝!

    +0

    爲什麼你就不能'反序列化()'數據並精確地操作數值? – mario

    +0

    請注意,如果'$ replacement'被設置爲與長度爲4的字符串不同的東西,則反序列化將不再有效。 反序列化,更改反序列化的對象,再次序列化它可能比使用正則表達式替換它的一部分更安全。 – Roman

    +0

    之前從未使用過此功能,先要RTM,謝謝! – Sibul

    回答

    5

    你正在用「7000」代替整個模式字符串,那是什麼錯誤。使用分組:

    $txt = '"ts";s:4:"8000";s:2:"tr";s:3:"200"'; 
    $pattern = '#(\"ts\"\;[a-z]{1}\:[0-9]{1}\:\")([0-9]*)(\".*)#'; 
    $replacement = '${1}7000${3}'; 
    $txt = preg_replace($pattern,$replacement,$txt); 
    print($txt); 
    

    => 「TS」; S:4: 「7000」; S:2: 「TR」; S:3: 「200」

    +2

    +1之前我可以完成我的提交。 –

    +0

    這是輝煌的,謝謝! – Sibul

    相關問題