【发布时间】:2017-09-17 20:27:23
【问题描述】:
我有几个类似于以下的字符串: ORG-000012 – 变体名称 – 数量:12 包 – 14.95 美元
我需要用 php 删除第二个连字符之前和最后一个连字符之后的所有字符。例如,上面的字符串需要返回为: 变体名称 – 数量:12 包
我曾尝试使用 strpos 和 substr,但我似乎无法获得正确的设置。请帮忙!
【问题讨论】:
我有几个类似于以下的字符串: ORG-000012 – 变体名称 – 数量:12 包 – 14.95 美元
我需要用 php 删除第二个连字符之前和最后一个连字符之后的所有字符。例如,上面的字符串需要返回为: 变体名称 – 数量:12 包
我曾尝试使用 strpos 和 substr,但我似乎无法获得正确的设置。请帮忙!
【问题讨论】:
只需使用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);
【讨论】:
您可以使用strpos 找到第一次出现- char 的位置,并使用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。
【讨论】:
可以使用 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
【讨论】: