0

我正在尝试使用替换字符串中的一些文本preg_replace。现在,也许我没有正确执行它,但是运行一次它并没有起到作用,因为我试图替换重叠的字符串。现在,当我运行preg_replace一次时,它工作正常(减去只有一半的文本是我想要的方式)。当我尝试运行它两次时,我在 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

如果我将循环更改为运行一次或缩短文本,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 回答