2013-02-19 2 views
1

문자열에서 마지막 두 자리를 추출하려고합니다. 먼저 공백이나 특수 문자를 제거하고 하이픈으로 바꾸면 서로 이어지는 두 개의 하이픈이 있으면 제거합니다. ext 후행 하이픈을 제거합니다. 다음으로 문자열에서 lat 하이픈 다음의 마지막 두 문자를 추출하려고합니다. 예를 들어이 문자열의 마지막 문자를 마지막 하이픈 다음에 1으로 어떻게 추출합니까? awesome-page-1. 내 코드는 생성 된 슬러그의 마지막 대시를 찾을 수 strrchr()를 사용하고 그 substr()를 사용하여 과거 건너 뛸 수 있습니다 여기마지막 문자 추출

$string = 'awesome [email protected]'; 
    $slug = preg_replace('/[^a-zA-Z0-9]/', '-', $string);//replace spaces and special characters with space 
     $slug = preg_replace('#-{2,}#', '-', $slug);//two hyphens following each other 
     $slug = trim($slug, '-');//remove trailing hyphens 

답변

1

입니다. $string에는 대시가없는 경우

$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-'); 

echo substr(strrchr($slug, '-'), 1); 

, 결과는

Demo

+0

감사 남자. 그것은 작동합니다. – sammyukavi

1

당신은 preg_replace에 대한 PARAM 같은 배열을 사용할 수 있습니다 비어있을 것입니다;

$str = 'awesome   [email protected]'; 
$slug = preg_replace(
    array('~[^a-zA-Z0-9-]~', '~-+~'), 
    '-', 
    trim($str) 
); 
print $slug; // awesome-page-1 

preg_match('~-([^-]*)$~', $slug, $m); 
print $m[1]; // 1 
1

또는, 당신은 단지 하이픈 후 마지막 문자가 숫자 경우 일치 할 경우 :

$slug = trim(preg_replace('/[^a-z0-9]+/i', '-', $string), '-'); 
if (preg_match('/^.*-(\d+)$/', $slug, $matches)) {                        
    echo $matches[1];                 
} else {                    
    echo 'No Match!';                 
}