2013-04-12 4 views
-3

이 정규식이 작동하지 않는 이유는 무엇입니까?regex를 사용하여 YouTube 링크를 제외하려면 어떻게해야합니까?

'#((http://|www.)(.*^(youtube)\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))#' 

YouTube에 속하지 않는 링크를 찾고 싶습니다. ^(youtube)

이 문자열 youtube을 부정하지 않습니다 양해 해 주시기 바랍니다 :

+1

왜 [URL을 구문 분석]하지 (http://php.net/manual/en를 가고 싶어 /function.parse-url.php)을 적절하게 수정하고 PHP_URL_HOST에서 [second level domain] (http://en.wikipedia.org/wiki/Second-level_domain)을 확인 하시겠습니까? 나는 너 자신을 위해 [2 문제] (http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html)를 만들지 않는 것이 좋습니다. – Joe

답변

2

당신은 당신의 정규식에서이 세그먼트를 가지고있다.

당신은이 같은 일치하는 텍스트를 부정하는 부정적 예측 또는 lookbehind가 필요합니다

(?!youtube) 

또는 정규식에 대한

(?<!youtube) 

이 될 수 있습니다

#((http://|www.)((?!youtube)[^.]+\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))# 

그러나 당신을 귀하의 질문에 귀하의 입력 문자열 샘플을 제공해야합니다. 여기 lookarounds에 대한

+0

그래서 어떻게해야합니까? ..... – user2275812

+0

감사합니다! 공장! (? user2275812

+0

이 답변이 효과가 있다면이 답변 옆에있는 체크 표시를 클릭하여 수락 할 수 있습니까? – anubhava

0

나는 반대 방향으로

$youtubePattern = '%(https?:\/\/(www\.)?youtube\.([a-z]{2,3}).*)%six'; 

if (!preg_match($youtubePattern, $subject)) { 
    // not youtube, do whatever... 
} 
관련 문제