2013-08-17 2 views
1

간단한 special characters like _ and |을 기반으로 일정한 간격으로 문자열의 일부분을 제거해야합니다. 여기 내 코드입니다 :preg_replace를 사용하여 문자열을 제거하십시오. 다른 대안이 있습니까?

<?php 
$text = "a*a1.zip,a2.zip|b*b1.zip|c*c1.zip|d*d1.zip|e*e1.zip|f*f1.zip|g*g1.zip|h*h1.zip"; 
$expl = explode("|", $text); 
print_r($expl); 
?> 

내가 제거하는 데 필요한 모든 alphabets and *'s, |'s 같은 내 출력이 같이해야 : 나는 preg_replace을 사용하려고하지만, 매우 열심히 :(을 이해하는

a1.zip,a2.zip,b1.zip,c1.zip,d1.zip,e1.zip,f1.zip,g1.zip,h1.zip

. 다른 대안이 있습니까? 미리 감사드립니다 ...

답변

2

대신 preg_match을 사용할 수 있지만 올바른 정규 표현식을 가져와야하므로 더 쉬울 필요는 없습니다. 당신이 정규식없이 뭔가를 사용하는 것을 선호하는 경우, 이중 explode 시도 :

$text = "a*a1.zip,a2.zip|b*b1.zip|c*c1.zip|d*d1.zip|e*e1.zip|f*f1.zip|g*g1.zip|h*h1.zip"; 
$expl = explode("|", $text); 
foreach ($expl as $part) { 
    // PHP 5.4+ 
    $values[] = explode('*', $part)[1]; 

    // OR PHP < 5.4 
    $tempvar = explode('*', $part); 
    $values[] = $tempvar[1]; 

    // Choose one of the above, not both 
} 
$string = implode(',', $values); 
1

이보십시오. 나는 이것을 시험하지 않았다. 하지만 당신은하지 않고 힌트를

<?php 
    $text = "a*a1.zip,a2.zip|b*b1.zip|c*c1.zip|d*d1.zip|e*e1.zip|f*f1.zip|g*g1.zip|h*h1.zip"; 


    $expl = explode("|", $text); 

    // YOU HAVE TO REMOVE a*, b*, c* which will be the first 2 characters after exploding. avoid this first 2 characters using substr 

    foreach($expl as $key=>$value) { 

     $result[] = substr($value,2); 

    } 

    $result_string = implode(',', $result); 

    ?> 
1

하나의 라이너를 얻을 수 preg_

$result_string = implode(',',array_map(function($v){return substr($v,strpos($v,'*')+1);},explode('|',$text))); 
관련 문제