2017-09-17 3 views
3

와 같은 문자가 마지막에 출현하기 전에 문자열 반환 : ORG-000012 - 변화의 이름 - 수량 : 12 팩 - $ 14.95나는 다음과 같은 몇 가지 문자열이 문자의 두 번째 발생 후와 PHP

두 번째 하이픈 앞에있는 모든 문자를 제거하고 마지막 하이픈 뒤에 php를 사용해야합니다. 예를 들어 위의 문자열은 다음과 같이 반환해야합니다. 변형 이름 - 수량 : 12 팩

strpos와 substr을 사용하려고했지만 올바른 설정을 얻을 수없는 것 같습니다. 도와주세요!

답변

1

으로 나누어 explode()을 사용하면됩니다. 사이에서 원소의 개수가 가변적 인 경우, 첫 번째와 마지막 요소 제거, array_shift()array_pop() 배열

<?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" 

Demo

또는 :

<?php 
$description = "ORG-000012 – Name of variation – Quantity: 12 Pack – $14.95"; 
$descriptionArray = explode(" – ", $description); 
array_pop($descriptionArray); 
array_shift($descriptionArray); 
var_dump($descriptionArray); 
을이어서 제 2 및 제 3 요소를 얻을

Demo

+0

감사합니다! 이것은 제가 꼭해야 할 곳으로 가는데 도움이되었습니다. 데모는 좋은 반응이었습니다. 매우 감사! – Christy

1

첫 번째 발생 위치 strrpos를 사용하여 strpos를 사용하고 마지막에 출현하는 위치가 오티 찾을 - 문자의 전자 :

그것이 무엇
$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의 substrinig이 - 문자가 처음 발생 후 한 문자부터 인쇄됩니다, 음수 (문자열의 전체 길이와 마지막 발생 위치의 차이가 - 문자 인)를 길이로 전달하여 -의 마지막 발생 문자를 substr으로 생략하여 문자를 생략합니다.

마지막으로 - 앞에 공백 문자가 인쇄되므로 결과도 trim 일 수 있습니다.

1

가 레지 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 
관련 문제