2012-04-19 1 views
0

을 tsring에서 URL의 일부를 얻을, 나는 URL을 추출해야하지만 경우에만 내가해야하는 것과는 무관 한 부분에서 필요한 도메인정규식은 HTML I 전체 HTML 문서를 처리하고있어

<html> 
<div id="" class="">junk 
<a href="http://example.com/foo/bar">example.com</a> 
morejunk 
<a href="http://notexample.com/foo/bar">notexample.com</a> 
</div> 
</html> 

일치 example.com의 전체 URL은 가져 오지 만 나머지는 notexample.com이 아닙니다. 그게 "http://example.com/foo/bar"또는 더 나은 것입니다, 물론 그 URL (술집) 마녀의 마지막 부분은 매번 다를 수 있습니다.

희망 나는 충분히 분명했습니다, 많이 고마워요!

편집 : 사용 PHP

+0

적어도 언어를 지정해야합니다. 게다가, 정규식이 가장 쉬운 해결책이라고 생각하지 않습니다. 문자열에 "example.com"이 포함되어 있는지 확인해보십시오. 많은 언어가 지원합니다. – MarioDS

+6

정규식으로 HTML을 구문 분석하지 마십시오. 자세한 내용은 [이 아름다운 대답] (http://stackoverflow.com/a/1732454/236660)으로 안내해 드리겠습니다. –

답변

1

정규식은 다음과 같이 HTML을 구문 분석 피해야한다 무언가이다. 다음은 필요한 것을 얻을 수있는 DOM 파서 기반 코드입니다.

$html = <<< EOF 
<html> 
<div id="" class="">junk 
<a href="http://example.com/foo/bar">example.com</a> 
morejunk 
<a href="http://notexample.com/foo/bar">notexample.com</a> 
</div> 
</html> 
EOF; 
$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); // loads your html 
$xpath = new DOMXPath($doc); 
$nodelist = $xpath->query("//a"); // gets all the links 
for($i=0; $i < $nodelist->length; $i++) { 
    $node = $nodelist->item($i); 
    $val = $node->attributes->getNamedItem('href')->nodeValue; 
    if (preg_match('#^https?://example\.com/foo/(.*)$#', $val, $m)) 
     echo "$m[1]\n"; // prints bar 
} 
+0

+1 아주 잘하고 아주 좋아. –

관련 문제