2012-07-16 4 views
0

는 내가 가진 :PHP. 파일 이름 부분을 제거하는 방법?

$filename = basename(__FILE__); 
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename); 

$id 이제 확장자가없는 파일 이름입니다. 확장 기능뿐만 아니라 접두사와 접미사도 파일에서 제거 할 수 있습니까?

는 prefix_ineedthis_suffix.php ->


업데이트를 ineedthis : 귀하의 답변을 주셔서 감사합니다! 불행히도, 답변으로 단 하나의 답을 표시 할 수 있습니다.

답변

2
$prefix = 'prefix_'; 
$suffix = '_suffix'; 

$pattern = sprintf('/%s(.+)%s/i', $prefix, $suffix); 

if (preg_match($pattern, $filename, $matches)) { 
    $id = $matches[1]; 
} 
+0

고마워요! @Phil –

1

대신 basename(string $path , string $suffix)을 사용하십시오. 원하는 경우 디렉토리 부분과 확장 부분을 제거 할 수 있습니다.

$id = basename(__FILE__, "_suffix.php") 
$prefix = "prefix_"; 
if (substr($id, 0, strlen($prefix)) == $prefix) { 
    $id = substr($id, strlen($prefix), strlen($id)); 
} 

그리고 this question에 따르면 RegEx를 사용하는 것보다 빠릅니다.

+0

$ filename = basename (__ FILE__); – Dale

+0

@Dale 내 대답을 편집하고있었습니다. 이제 완료되었습니다 –

+0

답장을 내리지 않으 셨습니다. 서둘러주세요. – Dale

0

explode()를 두 번 사용하여 먼저 확장 프로그램을 제거한 다음 접미어 & 접미어를 사용할 수 있습니다. 이렇게하면 배열 내의 모든 부분을 저장하게되며 나중에 필요할 경우 편리합니다.

+0

사실 확장에 밑줄이 포함되어 있지 않으면 두 번 분해 할 필요가 없습니다 ... – poncha

+0

내 응답을 편집해야했습니다. 경로를 제거하고 파일 확장명을 제거한 basename() 호출을 놓쳤습니다. 좋은 캐치. – OrionRogue

1

"접두어"와 "접미사"_ (밑줄)에 의해 분리 된 부분은, 당신은 모든 정규식이 필요하지 않을 수 있습니다 경우 반드시 다음을 위해 밑줄을 포함하지 않는 ineedthis 경우

$parts = explode("_", $filename); 
array_shift($parts); 
array_pop($parts); 
$ineedthis = implode("_", $parts); 

OR :

$parts = explode("_", $filename); 
$ineedthis = $parts[1]; 

경우에 당신 여전히 싶어 사용 정규식 :

if(preg_match("/^[^_]+_(.*)_[^_]+\.[a-z]{3,4}$/", $filename, $match)) 
    $ineedthis = $match[1]; 
else 
    /// oops! 
+0

답변 해 주셔서 감사합니다! 불행히도, 답변으로 단 하나의 답을 표시 할 수 있습니다. –