2011-10-30 16 views
2

私は正規表現を初めて使うので、助けが必要です。 私は'"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"を8000を交換する必要があります。 ここで何が間違っていますか?ありがとう!

+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

関連する問題