繁体   English   中英

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

[英]Returning a string after the second occurrence of a character and before the last occurrence of the same character with php

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

我需要在第二个连字符之前和最后一个连字符之后删除所有字符。 例如,上面的字符串需要返回为:变体名称 - 数量: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

它所做的是,它会打印的substrinig $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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM