私はこのようないくつかの文字列を有する:"は内スペース交換"、にpreg_replaceのPHP
I:11; 5:{S:2: "ID"; S:4: "1097"; Sを:5: "iName"; s:12: "Ovo de Andre"; s:10: "dropChance"; s:4: "2000"; s:4: "type"; i:1; s:5: "kName"; s:12:「Ovo de Andre」;
そして、私はその文字列を置き換えることができるか知りたいのです:「Ovo_de_Andre」
が、それはそのスペースを変更することはできません:「OVO・デ・アンドレ」このようなものに""外に出る可能性があります。
私が試した:
$文字列=にpreg_replace( '/ "()\ S()。?。?"/M'、 ' "$ 1_ $ 2"'、$を文字列);
しかし、それはちょうどその文字列は次のようになり、最初のスペースを置き換える:
私は:11;:5:{S:2: "ID"; S:4:」 s:5: "iName"; s:12: "Ovo_de Andre"; s:10: "dropChance"; s:4: "2000"; s:4: "type"; i:1; s:5: "kName"; s:12: "Ovo_de Andre";
私はそれを確認するためにしばらく時間をとることができると知っていますが、パフォーマンスには問題があり、冗長になると思います。
また、同じようにすることができますが、 ""内のスペースを置き換えるのではなく、 ""内にスペースを入れずに置き換えることができます。
ありがとうございます。
私は似たようになりますが、私はそれは私が欲しいものを到達させるために変更すること何を管理することができませんでした。このリンクを持っている: Using preg_replace to replace all occurrences in phpを。
ここでは完全なデータですが、私は文字列で1つずつテストしてエラーを探しました。
$ string = 'a:16:{'; 0:A:5:{s:2: "id"; s:4: "1113"; s:5: "iName"; s:5: "Drops"; s:10 : "dropChance"; s:4: "7500"; s:4: "type"; i:1; s:5: "kName"; s:5: "Drops";} '; "iim"; s:11: "Mime Monkey"; s:4: "1585"; s:5: "iName"; s:11: 10: "dropChance"; s:4: "7000"; s:4: "type"; i:1; s:5: "kName"; s:11: "Mime Monkey";} ';$ string。= 'i:2; a:5:{s:2: "id"; s:4: "1027"; s:5: "iName"; s:7: "Raptice"; s:10 : "ドロップチャンス"; s:4: "7000"; s:4: "タイプ"; i:1; s:5: "kName"; s:7: "Raptice";$ string。= 'i:3; a:5:{s:2: "id"; s:4: "1002"; s:5: "iName"; s:6: "ポーリング"; s:10 : "dropChance"; s:4: "7000"; s:4: "type"; i:1; s:5: "kName"; s:6: "Poring";} ';$ string。= 'i:4; a:5:{s:2: "id"; s:4: "1767"; s:5: "iName"; s:8: "Deviling"; s:10 : "dropChance"; s:4: "5000"; s:4: "タイプ"; i:2; s:5: "kName"; s:8: "Deviling";$ string = 'i:5; a:5:{s:2: "id"; s:4: "1767"; s:5: "iName"; s:8: "deviling"; s:10 : "dropChance"; s:4: "5000"; s:4: "タイプ"; i:2; s:5: "kName"; s:8: "Deviling"; $ string。s:5: "i":s:8: "Angeling"; s:10: "dropChance" s:4: "5000"; s:4: "タイプ"; i:2; s:5: "kName"; s:8: "Angeling";$ string。= 'i:7; a:5:{s:2: "id"; s:4: "1766"; s:5: "iName"; s:8: "Angeling"; s:10 : "dropChance"; s:4: "5000"; s:4: "type"; i:2; s:5: "kName"; s:8: "Angeling";$ string。= 'i:8; a:5:{s:2: "id"; s:4: "1004"; s:5: "iName"; s:6: "Zangão"; s:10 : "dropChance"; s:4: "3500"; s:4: "type"; i:1; s:5: "kName"; s:6: "Zangão";} ';$ string。= 'i:9; a:5:{s:2: "id"; s:4: "1236"; s:5: "iName"; s:12: "Ovo de Andre"; s :10: "dropChance"; s:4: "3000"; s:4: "type"; i:1; s:5: "kName"; s:12: "Ovo de Andre";$ string。= 'i:10; a:5:{s:2: "id"; s:4: "1076"; s:5: "iName"; s:9: "Esqueleto"; s:10 s:4: "type"; i:1; s:5: "kName"; s:9: "Esqueleto";} '; 035:i:11; a:5:{s:2: "id"; s:4: "1097"; s:5: "iName"; s:12: "Ovo de Andre"; :10: "dropChance"; s:4: "2000"; s:4: "type"; i:1; s:5: "kName"; s:12: "Ovo de Andre"; 012:I:12; a:5:{s:2: "id"; s:4: "1051"; s:5: "iName"; s:14: "Besouro-Ladrão"; s:4: "タイプ"; i:1; s:5: "kName"; s:14: "Besouro-Ladrão"; i:13:a:5:{s:2: "id"; s:4: "1183"; s:5: "iName"; s:16: "ChonChon Raivoso"; s: 10: "dropChance"; s:4: "1500"; s:4: "type"; i:1; s:5: "kName"; s:16: "ChonChon Raivoso";} '; i:14:a:5:{s:2: "id"; s:4: "1011"; s:5: "iName"; s:8: "ChonChon"; s: 10: "dropChance"; s:4: "1500"; s:4: "type"; i:1; s:5: "kName"; s:8: "ChonChon";} ';$ string = 'i:15; a:5:{s:2: "id"; s:4: "1784"; s:5: "iName"; s:5: "Stapo"; s:10 s:5: "Stapo";} ';' ';' '; $ string。= '}'; 0とI:ベクトルの11のデータの行数とサイズが存在するかを示したデータの間にいくつかのスペース
もしあなたが私のラインでわかります慎重に見えました。
これは、シリアル化された配列のように見える、なぜあなたが最初にそれをデシリアライズしていませんか?とにかくスペースを置き換えるだけなら、正規表現は必要ありません。 ['str_replace'](http://php.net/manual/en/function.str-replace.php)を見てください。 –
str_replaceは、 ""から空白を置き換えて、完全なシリアル化されたものではないので、この文字列を破ることになるでしょう。この関数は、正しいシリアル化された文字列の外にあるスペースを削除します。 – Marcelo
Ok @Marcelo - ここでは、有効なシリアライズされたオブジェクトがないことを明確にしています。私の答えは無視してください! – calumbrodie