我有几个类似于以下的字符串: ORG-000012 – 变体名称 – 数量:12 包 – 14.95 美元
我需要用 php 删除第二个连字符之前和最后一个连字符之后的所有字符。例如,上面的字符串需要返回为: 变化名称 – 数量:12 包
我尝试使用 strpos 和 substr 但我似乎无法获得正确的设置。请帮忙!
您可以使用
-
查找 strpos
字符第一次出现的位置,并使用 strrpos
查找最后一次出现的位置:
$s = 'ORG-000012 - Name of variation - Quantity: 12 Pack - $14.95';
$sub = substr($s,strpos($s, '-')+1, strrpos($s, '-')-strlen($s));
print $sub; // or print trim($sub) to remove the whitespaces
它的作用是,它将从第一次出现
$s
字符后的一个字符开始打印 -
的子字符串,并通过传递负值(总长度的差值)省略最后一次出现 -
中的字符最后一次出现 -
字符的字符串和位置)作为长度到 substr
。
请注意,这也会打印最后一个
-
之前的空格字符,因此您可能也想 trim
结果。
explode()
,按 –
分割。然后,获取第二个和第三个元素:
<?php
$description = "ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95";
$descriptionArray = explode(" – ", $description);
$finalDescription = $descriptionArray[1]." – ".$descriptionArray[2];
var_dump($finalDescription); // string(39) "Name of variation – Quantity: 12 Pack"
array_shift()
和 array_pop()
数组将删除第一个和最后一个元素:
<?php
$description = "ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95";
$descriptionArray = explode(" – ", $description);
array_pop($descriptionArray);
array_shift($descriptionArray);
var_dump($descriptionArray);
可以使用 reg expr,尝试使用:
preg_match(
'/(?<=\s–\s)(.*)(?:\s–\s)[^\s]+$/',
'ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95',
$matches
);
echo $matches[1]; //Name of variation – Quantity: 12 Pack
无需将字符串分解为数组,然后逐个挑选。
删除前两个非连字符字符序列,后跟连字符和空格,并删除字符串末尾最后出现的空格、连字符和非连字符字符。
代码:(演示)
$s = 'ORG-000012 - Name of variation - Quantity: 12 Pack - $14.95';
echo preg_replace('/^(?:[^-]+-){2} | -[^-]+$/', '', $s);