2014-06-09 4 views
0

웹 페이지에서 모든 URL 목록을 수집 중입니다. 내 문제는 목록에 URL 목록에서 원하는 이미지가 모두 포함되어 있다는 것입니다.이미지 URL을 URL 목록에서 제외하십시오.

이 스크립트는 웹 페이지의 모든 링크를 제공합니다.

function getUrl($html) 
    { 
     $regex = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
     preg_match_all($regex, $html, $matches); 
     $urls = $matches[0]; 
     return $urls; 
    } 

다음은 소스 코드에서 이미지를 가져 오는 정규 표현식입니다.

/\bhttps?:\/\/\S+(?:png|jpg)\b/

어떻게 추출 된 URL 목록에서 이미지를 제외 할 수 있습니까? UPDATE

$regex = '/(?!.*(?:\.jpe?g|\.gif|\.png)$)\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
     preg_match_all($regex, $html, $matches); 
     $urls = $matches[0]; 

왜 여전히 정규식 할 수 없습니다 exclue 이미지?

+0

을 삭제 : 당신은 실제로도 그냥이 일치하도록 시도 내다가 필요하지 않습니다 티. URL이 이미지처럼 보일 수 없습니다 ** 특히 이미지를 제공하는 스크립트에 대한 직접 링크와 같은 것 인 경우 'click here for pic'. 당신은 아마 ''에있는 어떤 것이라도 이미지라고 가정 할 수 있지만 그 밖의 것은 "그걸 행운"입니다. –

답변

1

lookahead을 사용하여 이미지의 확장자로 끝나는 라인을 확인한 다음 수동으로 일치하는 라인에서 해당 라인을 제거하십시오. 예를 들어, 코드의 라인이 .PNG 또는 .jpg로 끝나는 보장하기 위해이에 대해 일치 : URL 목록을 통해

/\.(?=(png|jpg)$)/

그래서 for하고 그 정규식과 일치하지 않는 경우를 복제.

편집 :

\.(png|jpg)$

을 당신이 '외설 어떤에서 이미지 URL을 안정적으로 무엇을 말할 수없는 경기를

+0

'\. (png | jpg) $'와 일치하면 각 결과를 검사한다는 의미였습니까? 하지만 시간이 늘어날 것 같아요. 내 실제 정규 표현식을 업데이트 할 수 있다면. 그것은 더 빠를 것이다. 이 정규 표현식은 이미지 링크'/(????????????????????????????????????????????????????????????????????????????????????????? -Z0-9 + & @ # \/%? = ~ _ | $! :,.;] * [A-Z0-9 + & @ # \/% = ~ _ | $]/내가 맞습니까? 그래도 이미지가있는 링크가 나타납니다. – user123

+0

업데이트 질문보기 – user123

관련 문제