Preg_replace替换特定短语

时间:2013-09-03 15:53:21

标签: php regex string preg-replace data-manipulation

我有一个描述,其中包含两个我要删除的文本和要格式化的文本。字符串可以更改并且其中包含 和空格(这是错误的数据)。

我需要删除产品名称和最后一个文本块(两者都可以根据“产品”进行更改)。我将产品名称存储为变量,如下所示:

$prName = "Test CPL560 Home Office Corner Workstation";

需要删除的文本如下:

  

free delivery5-7 working days  assembly required?Yes   guarantee2 years  dimensions(mm) Width:  1600-2340  Depth:  700-1350  Height: 760

删除产品名称应该相当简单,但最后一段文字让我感到困惑,因为宽度,深度等都可以逐个产品地改变。有什么建议吗?

完整字符串:

  

Test CPL560 Home Office Corner WorkstationExecutive, designer style corner workstation. The smart-looking, functional CPL560 with complementing side storage unit featuring high gloss black drawer fronts, provides the perfect solution for the modern, spacious home office. Quality 32mm desktop measuring 1600x700mm, finished with  2mm ABS edge protection providing a comfortable, durable finish. The desktop rear wall features cable guide and rear cable housing. The side return storage unit of the Test CPL560 corner computer desk rotates through 360 degrees to allow the side return to be located and fixed on either the right or left hand side of the desk top, whichever best suits your working position and home office layout. The side return unit comprises 3 push-to-open storage drawers with high gloss drawer fronts, a CPU storage compartment with rear cable management and 2 further storage compartments with one height adjustable shelf. CPL560 Corner Workstation is available in White/High Gloss BlackOptional installation/assembly available for this product  free delivery5-7 working days  assembly required?Yes   guarantee2 years  dimensions(mm) Width:  1600-2340  Depth:  700-1350  Height: 760

我想要的是什么:

  

测试CPL560家庭办公室角落工作站执行,设计师风格的角落工作站。外观时尚,功能强大的CPL560具有互补的侧面存储单元,具有高光泽的黑色抽屉前端,为现代宽敞的家庭办公室提供了完美的解决方案。优质32毫米台式1600x700毫米,2毫米ABS边缘保护,提供舒适,耐用的表面。桌面后壁采用电缆导管和后部电缆外壳。

     

Test CPL560转角电脑桌的侧面返回存储单元旋转360度,可以将侧面返回定位并固定在桌面的右侧或左侧,最适合您的工作位置和家中办公室布局。侧面返回单元包括3个带有高光泽抽屉前端的推拉式储物抽屉,带后部电缆管理的CPU储物箱和2个带一个高度可调节搁板的储物箱。 CPL560转角工作站提供白色/高光泽黑色可选择此产品的安装/组装

我并不关心段落发生的位置,只是为了使其半可读。这可以通过preg_replace或regex吗?

3 个答案:

答案 0 :(得分:1)

如果您知道可能存在的所有可能“结束文本”的情景,您应该可以在多次通过中执行此操作。 首先,您可以使用

 转换为空格
$string = str_replace(' ', ' ', $string);

$string = html_entity_decode($string, ...);

然后,您可以使用explode(' ', $string);对单词进行标记,以获取大量单词,然后跳过单词以检测完全匹配,例如Width:Height:或{{1}将它们剥离到属性数组中。使用free delivery

重新加入主要说明

答案 1 :(得分:1)

你可以试试这个:

$result = str_replace(' ', ' ', $text);
$result = str_replace($prName, '', $result);
$result = preg_replace('~^.*?yreviled eerf +~', '', strrev($result));
$result = strrev($result);

答案 2 :(得分:0)

带有可以更改的值的模式的文本,基于正则表达式的搜索和替换可以实现。

但在此之前,我会将文本规范化,例如:用空格替换 和用一个空格等替换两个或多个空格。但是只有当你不需要“污垢”来确定要删除哪些部分时才会执行该步骤。在这种情况下先删除,然后标准化。