php字符串替换字符#

时间:2018-11-26 15:38:40

标签: php

我们使用以下代码<?php echo $producttitle; ?>

加载动态产品标题

输入可能是:

HP ProBook 450 G5 15.6英寸i5-8250U-4LT51EA#ABB-黑色

此行是动态的,因此#之后的代码可以更改,也可以是#ACC。

应成为:

HP ProBook 450 G5 15.6“ i5-4LT51EA-黑色

这些产品标题可以包含类似#的值。 它始终显示为#,没有任何空格。 我们要删除值#直到下一个空格。

这些产品标题还可以包含15.6英寸,我们希望将其替换为15.6“。因此,应将文本英寸替换为符号”。

我们还想将值i5-8250U更改为i5。但是i5也可以是i3或i7。因此,它应该替换掉从-到下一个空格的所有内容。

我们如何在代码中同时包含两个替换项?

我目前有以下内容:

<?php $trans = array(' inch' => '"'); ?>
<h1><?php echo strtr($producttitle, $trans); ?></h1>

但是现在我需要包含#部分,我们如何实现呢?

1 个答案:

答案 0 :(得分:3)

您可能会使用preg_replace并创建一个包含2个正则表达式的数组和一个包含2个替换项的数组。

在替换中,您可以使用$1来引用第一个捕获组,以将其保留为替换。

第一部分

\s+inch\s+(i[357])-\w+
  • \s+inch\s+匹配1+个空白字符,先匹配inch,然后匹配1+个空白字符(也不能匹配换行符,可以使用\h+代替\s来匹配1 +水平空格字符)
  • (i[357])正在捕获要匹配i的组,后跟3、5或7
  • -字面上匹配
  • \w+匹配单词字符1次以上

替换为

" $1

第二部分

(\w+)#\w+
  • (\w+)与1个以上的字符匹配的捕获组
  • #\w+匹配#,后跟1个以上的字符

替换为

$1

例如:

$string = 'HP ProBook 450 G5 15.6 inch i5-8250U - 4LT51EA#ABB - Black';
$find = array('/\s+inch\s+(i[357])-\w+/', '/(\w+)#\w+/');
$replace = array('" $1', '$1');
$result = preg_replace($find, $replace, $string);
echo $result; // HP ProBook 450 G5 15.6" i5 - 4LT51EA - Black

Demo