3

我正在处理一些我想删除的过多空白。一个例子:

Envelopes/Env. Thick/Env. Thin      0 pages


Label      0 pages


Hagaki      0 pages



Replace Count


Drum Unit      0


Toner      0

我尝试过使用preg_replace('/\s\s+/', ' ', $content);,但结果不是我所期望的。preg_replace 的输出:
Envelopes/Env. Thick/Env. Thin 0 pages Label 0 pages Hagaki 0 pages Replace Count Drum Unit 0 Toner 0

我想要的是:

信封/信封。厚/环境。薄 0 页
标签 0 页
Hagaki 0 页
更换计数鼓单元 0
墨粉 0

我的代码:

<?php

$cw=curl_init("http://192.168.1.135/printer/maininfo.html");
$txtfl=fopen("printermtpage.txt","w");

curl_setopt($cw, CURLOPT_FILE, $txtfl);
curl_setopt($cw, CURLOPT_HEADER, false);

curl_exec($cw);

curl_close($cw);

$file="printermtpage.txt";
$txtopentoread=fopen("printermtpage.txt","r");
$txtread=fread($txtopentoread,filesize($file));

$notags=strip_tags(html_entity_decode($txtread));
$remblanks=preg_replace('/\s\s+/', ' ', $notags);

fclose($txtfl);

?>
4

2 回答 2

3

正则表达式\s匹配[\r\n\f\t\v ],并且由于您不需要删除换行符(或班级中的其他人),您可以使用:

$remblanks=preg_replace('/[ \t]+/',' ',$notags);

在这里解释演示:http ://regex101.com/r/tS0vG7

更新

去除 2 个以上空白字符的高级正则表达式:

preg_replace('/(?|([ \t]){2,}|(?:\r?(\n)){2,})/','\1',$notags);

在这里解释演示:http ://regex101.com/r/nU4fU2

于 2013-03-23T22:36:17.143 回答
2

我认为问题在于也\s匹配换行符(\n)。因此,您将换行符转换为空格,有效地将它们全部放在一行上。

尝试使用\[:blank:\]仅匹配空格和制表符。

于 2013-03-23T22:36:19.630 回答