Возвращает строку после второго вхождения символа и перед последним вхождением того же символа в php
У меня есть несколько строк, похожих на следующие: ORG-000012-название вариации-Количество: 12 упаковок - $14.95
Мне нужно удалить все символы перед вторым дефисом и после последнего дефиса с помощью php. Например, приведенная выше строка должна возвращать вид: Название вариации-Количество: 12 упаковок
Я пытался использовать strpos и substr, но, похоже, не могу получить правильную настройку. Пожалуйста, помогите!
3 ответа:
Просто используйте
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);
Вы можете найти положение первого вхождения
-
char, используя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
результат.