我们使用以下代码<?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>
但是现在我需要包含#部分,我们如何实现呢?
答案 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