Возвращает строку после второго вхождения символа и перед последним вхождением того же символа в 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результат.