我正在尝试使用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中具有文本提取的相关表,但尚未保留空白区域。
答案 0 :(得分:0)
我不知道你的preg_replace和服务器崩溃之间的关系是什么,但你可以在没有循环的情况下一步完成:
$result = preg_replace('~(?<=[0-9])(?=0\.[0-9]{1,4})~', ' ', $text);
避免重叠问题,因为模式仅使用外观来确定空间位置。