0

を使用して文字列内のテキストを置き換えようとしていますpreg_replace。今、私はそれを正しく行っていないかもしれませんが、重複する文字列を置き換えようとしているため、一度実行してもうまくいきません。一度実行するpreg_replaceと、正常に動作します(テキストの半分だけが必要です)。2回実行しようとすると、ChromeとIEの両方で接続不良エラーが発生します(したがって、ブラウザの問題ではなく、そうなると思っていたわけでもありません)少なくともWAMPの場合(実際には試していません)サーバ)。

それで、何か問題がありますか:

1)私のPHPロジック、

2)私の正規表現、

3) または preg_replace と WAMP?

次の形式のすべての数値を区切りたい (間にスペースを入れたい): 0.xx

$text = "0.450.590.88 AUT 0.570.210.400.89 CUS 0.630.310.370.440.87 DEL 0.580.130.310.570.450.89 EVA 0.600.230.420.550.440.650.91 INT 0.590.390.620.530.540.520.560.85 IOP 0.480.240.440.440.440.550.580.600.88 MON 0.690.390.480.560.640.610.610.550.520.85"; 

for ($i=0;$i<2;$i++)
    $text = preg_replace('#0\.(\d{1,4})0\.#', '0.${1} 0.', $text);

$text の結果は次のようになります。

0.45 0.59 0.88 AUT 0.57 0.21 0.40 0.89 CUS 0.63 0.31 0.37 0.44 0.87 DEL 0.58 0.13 0.31 0.57 0.45 0.89 EVA 0.60 0.23 0.42 0.55 0.44 0.65 0.91 INT 0.59 0.39 0.62 0.53 0.54 0.52 0.56 0.85 IOP 0.48 0.24 0.44 0.44 0.44 0.55 0.58 0.60 0.88 MON 0.69 0.39 0.48 0.56 0.64 0.61 0.61 0.55 0.52 0.85

ループを 1 回実行するように変更するか、テキストを短くすると、PHP は問題なく実行されます。

これはより大きなテキストの一部であるため、これらを配列に貼り付けたくはありません。より適切にフォーマットしたいだけです。背景情報の一部として、このテキストは、テキストが抽出された PDF の相関テーブルから取得されますが、空白は保持されていません。

4

1 に答える 1

0

preg_replace とサーバー クラッシュの関係はわかりませんが、ループなしでワンステップで実行できます。

$result = preg_replace('~(?<=[0-9])(?=0\.[0-9]{1,4})~', ' ', $text);

パターンはルックアラウンドのみを使用してスペース位置を決定するため、オーバーラップの問題は回避されます。

于 2013-09-04T01:35:01.027 に答える