我有几个类似于以下的字符串: ORG-000012 - 变种名称 - 数量:12包 - 14.95美元
我需要在第二个连字符之前和最后一个连字符之后删除所有字符。例如,上面的字符串需要返回为: 变异名称 - 数量:12包
我曾尝试使用strpos和substr,但似乎无法获得正确的设置。请帮忙!
答案 0 :(得分:1)
只需使用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);
答案 1 :(得分:1)
您可以使用-
找到第一次出现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
结果。
答案 2 :(得分:1)
可以使用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