使用php返回一个字符第二次出现之后和最后一次出现相同字符之前的字符串

问题描述 投票:0回答:4

我有几个类似于以下的字符串: ORG-000012 – 变体名称 – 数量:12 包 – 14.95 美元

我需要用 php 删除第二个连字符之前和最后一个连字符之后的所有字符。例如,上面的字符串需要返回为: 变化名称 – 数量:12 包

我尝试使用 strpos 和 substr 但我似乎无法获得正确的设置。请帮忙!

php string substr strpos
4个回答
3
投票

您可以使用

-
查找
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
结果。


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);

演示


0
投票

可以使用 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 

0
投票

无需将字符串分解为数组,然后逐个挑选。

删除前两个非连字符字符序列,后跟连字符和空格,并删除字符串末尾最后出现的空格、连字符和非连字符字符。

代码:(演示

$s = 'ORG-000012 - Name of variation - Quantity: 12 Pack - $14.95';

echo preg_replace('/^(?:[^-]+-){2} | -[^-]+$/', '', $s);
© www.soinside.com 2019 - 2024. All rights reserved.