2013-06-16 2 views
1

PHP 정규 표현식을 사용하여이 URL의 끝에서 '_normal'을 제거해야합니다.밑줄과 문자열을 제거하는 정규 표현식

http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445_NORMAL

그래서

http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445.jpeg

이되는 것을
.JPEG.

나는
$prof_img = preg_replace('_normal', '', $prof_img); 

을 시도했지만 밑줄 물건을 던지는 것 같다.

+1

'error_reporting'을 사용하셨습니까? – mario

답변

3

str_replace를 사용해보십시오. 이런 식으로 정규 표현식보다 훨씬 효율적입니다.

preg_replace('|_normal|','', $url);

+0

정규 표현식이하는 일을 설명 할 수 있습니까? –

+0

리터럴 문자열 "_normal"을 빈 문자열로 바꿉니다. 파이프'| '는 구분 기호입니다. –

3

str_replace 작동합니다 : 당신이 정규 표현식을 사용하려는 경우

그러나, 당신은 구분 기호를해야합니다.

$prof_img = str_replace('_normal', '', $prof_img); 
7

다른 사람들이 언급했듯이 str_replace은 아마도이 간단한 예에서 가장 좋은 옵션 일 것입니다.

특정 코드의 문제

이 정규식 문자열이 undelimited 것을, 당신이 대신해야

$prof_img = preg_replace('/_normal/', '', $prof_img); 

는 참조 용 PCRE regex syntax를 참조하십시오.

밑줄은 PCRE에서 일반 문자로 처리되며 사물을 버리지는 않습니다. 당신은 단지 _normal 파일 이름의 끝 부분이 일치해야하는 경우

, 당신은 사용할 수 있습니다

$prof_img = preg_replace('/_normal(\.[^\.]+)$/', '$1', $prof_img); 

이 작동하는 방법에 대한 자세한 내용은 preg_replace를 참조하십시오.

+1

** + 1 ** 문제를 지적하기 위해. – HamZa

+0

이것은 URL의 * any *'_normal'과 일치합니다. 어쩌면 그건 문제가 아니지만 단지 문제는 아닙니다. –

+0

@Jack 좋은 지적. 나는 그것을 지금 고쳤다. –

1

정규식 주위에 구분 기호를 추가하는 것을 잊어 버렸습니다.

PCRE 함수를 사용

http://www.php.net/manual/en/regexp.reference.delimiters.php

, 패턴 분리 둘러싸인 것이 요구된다. 구분 기호는 영숫자가 아닌 백 슬래시가 아닌 공백 문자가 될 수 있습니다.

자주 사용되는 구분 기호는 슬래시 (/), 해시 기호 (#) 및 물결표 (~)입니다. 다음은 모두 유효 범위가 지정된 패턴의 예입니다.

$prof_img = preg_replace('/_normal/', '', $prof_img); 

$prof_img = preg_replace('#_normal#', '', $prof_img); 

$prof_img = preg_replace('~_normal~', '', $prof_img); 
+0

rtfm 언급에 +1 : D –

0

당신은 먼저 URL을 분해 사용 교체를 수행하고, 즉 함께 다시 스틱 수너의가 구분되지 않은

  1. :

    $url = 'http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445_normal.jpeg'; 
    
    $parts = pathinfo($url); 
    // transform 
    $url = sprintf('%s%s.%s', 
        $parts['dirname'], 
        preg_replace('/_normal$/', '', $parts['filename']), 
        $parts['extension'] 
    ); 
    

    당신은 당신의 표현과 내 사이의 두 가지 차이점을주의 할 수도 있습니다.

  2. 광산이 고정되어 있습니다. 즉, 파일 이름의 에서 발생하면 광산이 고정됩니다. 즉, _normal 만 제거합니다. 비 캡처 그룹을 사용

0

, 당신은 또한이 같은 시도 할 수 있습니다 :

$prof_img = preg_replace('/(.+)(?:_normal)(.+)/', '$1$2', $prof_img); 

이 일치하는 등 필요한 부분을 유지합니다.