2011-10-15 2 views
0

이것은 작업중인 PHP 파일의 일부 코드입니다. 'domain.com'과 일치해야하지만 href 태그를 찾는 문서를 파싱하기 때문에 작동하지 않습니다. http://www이 필요합니다. 일치합니다. 나는 아래 preg 경기를 시도했지만 작동하지 않았고 코딩이 도움이되지 않을 것입니다.PHP 일치 * .domain.com

preg_match ("/domain.com/i");

 $match = 'http://www.domain.com'; 

     for($i=0;$i<$documentLinks->length;$i++) 
     { 
      $documentLink = $documentLinks->item($i); 
      if ($documentLink->hasAttribute('href') AND substr(strtolower($documentLink->getAttribute('href')), 0, strlen($match)) == $match) 
      { 
+0

나만인가, 또는 도메인 대신 실수로 문제가 발생합니까? – ytg

+0

여기에 Mistype 만 (편집 됨) 코드에서 문제가되지 않습니다. – Anagio

답변

3

이 시도 :

for($i=0;$i<$documentLinks->length;$i++) 
{ 
    $documentLink = $documentLinks->item($i); 
    if ($documentLink->hasAttribute('href')) 
    { 
     if (preg_match('!^https?://([^/]+\.)?domain\.com(/|#|$|\?)!i', trim($documentLink->getAttribute('href')))) 
     { 

정규 표현식은 중요한 부분입니다 : 문자열의 시작 부분에

^https?://([^/]+\.)?domain\.com(/|#|$|\?) 

시작, 그 수도, 다음 옵션 하위 도메인을 HTTP 또는 HTTPS를 일치 슬래시를 포함하지 않아야합니다 (따라서 도메인 부분에 있음을 알 수 있습니다). 일치시킬 도메인이있는 경우 경로 시작, 단편 시작 또는 URL 끝

+1

+1, 나는 그것을 좋아한다. 그리고 현명한 합당한 정규 표현식. 하나의 작은 추가 - 내가'trim()'전에 일치하는 값을 만들 것입니다. 시작/끝 마커를 사용 했으므로 (앞에서와 같이) 앞/뒤로 공백이 있으면 일치하지 않게됩니다. 많은 브라우저가 이것을 용서할 것이므로 아마 그렇게해야 할 것입니다. 또한, 정규식 계정에 대한 쿼리 문자열을 계정합니까? – DaveRandom

+0

좋은 점 - 쿼리 문자열은 도메인 부분 바로 뒤에 올 수 있습니다. 둘 다 고정 ... – Cal

+0

고마워, domain.com, www.domain.com과 일치하지만 test.domain.com이 아닌 이유는 무엇입니까? – Anagio

관련 문제