2013-12-22 3 views
2

페이지에서 모든 링크 (href)를 가져오고 싶습니다.페이지에서 모든 링크를 가져옵니다.

이 내 실제 코드 :

preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor); 

그러나 이것은 단지 도메인 및 하위 도메인 (name.name.ex 또는 name.ex 등) 잡고 있지만 name.ex/name/name.php 같은 사용자 정의 URL을 잡아하지 않습니다.

누구든지 정규식을 도와 줄 수 있습니까?

+0

당신은 모든 도메인을 나열 할 수 (즉, .com, .org, .net 등)를 입력 한 다음 preg_match_all을 입력하십시오. 다음은 모든 TLD의 위키입니다. http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains – Enijar

답변

3

이 점에 대해 정규 표현식을 사용하지 않는 것이 좋습니다. 구문 분석하고 결과를 얻으려면 DOM을 사용하는 것이 좋습니다. 다음은

DOMXPath

$html = '<a href="name.ex/name/name.php">text</a> 
     <a href="foo.com">foobar</a>'; 

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

$xpath = new DOMXPath($doc); 

foreach ($xpath->query('//a') as $link) { 
    $links[] = $link->getAttribute('href'); 
} 

print_r($links); 

를 사용하여 이에 대한 예 사용하는 DOMDocument를 더 쉽게 Working demo

0

이 정규 표현식을보십시오 : 여기

$pattern = "/href="([^\s"]+)/"; 
preg_match_all($pattern, $content, $matches); 

if (count($matches[1]) { 
    foreach($matches[1] as $match) 
    echo $match . "<br />"; 
} 
+0

작동하지 않습니다. URL을 추가하지 않습니다. –

+0

이 나를 위해 작동하는 전체 코드를 추가했습니다. 확인해주십시오 – di3sel

0

당신이 이동합니다!

$string = "<a href='test.php/url' class=>test</a>testar <a href='test2.php/url2' class=>test</a>"; 
$pattern = "/<a(?:[^>]*)href=([^ ]*)(?:[^>]*)>/"; 

preg_match_all($pattern, $string, $matches); 

foreach($matches[1] as $match){ 
    echo $match; 
} 
1

를 참조입니다 :

$doc = new DOMDocument(); 
@$doc->loadHTML($html); 

$linkNodes = $doc->getElementsByTagName('a'); 

foreach($linkNodes as $linkNode) { 
    $urls[] = $linkNode->getAttribute('href'); 
} 

print_r($urls); 
관련 문제