2011-08-29 7 views
1

나는 다소 여기에서 붙어있다.
나는이 패턴을 가지고 :
<a class="title" href="showthread.php?t=XXXXX" id="thread_title_XXX">DATADATA</a>
는 '고유 한 서명'난 그냥 썼다있는 동안 나는 내 문자열 (웹 페이지)가 내 모든 데이터가이 형식으로 저장됩니다 것을 알고있다. XXX의 수는 2에서 12 자리 사이의 DIGITS (각 X는 숫자)의 어딘가에 동적입니다.
전체 행을 찾기 위해 긴 표현식을 작성할 수는 있지만 전체적인 것이 아닌 데이터를 추출하고 싶습니다.

어떻게해야합니까? 예를 들어 주시면 감사하겠습니다.
감사합니다.어떤 정규식이 필요합니까?

답변

2

실제로 무엇을하고 싶습니까? XXXXX 서명 또는 모든 링크를 받으시겠습니까?

이 시도 -이 서명하고 데이터를 얻을 수있다

<?php 
$S = '<a class="title" href="showthread.php?t=1234567" id="thread_title_XXX">DATADATA</a>'; 
$pattern = '!<a.*href="showthread.php\?t=(.*)".* id=".*">(.*)</a>!'; 

echo "<pre>"; 
print_r(preg_match($pattern, $S, $res)); 
print_r($res); 
echo "</pre>"; 
?> 
3

정규 표현식을 잊어 버리면 HTML과 같은 형식을 구문 분석하지 않습니다. 특히 이 이미 존재하는 경우 특히 그렇습니다.

XPath를 사용하여 노드를 찾기 : 당신이 얻을

$href = $node->getAttribute('href'); 
parse_str(substr($href, strpos($href, '?')+1), $query); 
$t = $query['t']; 

$id = $node->getAttribute('id'); 
$title = substr($id, strlen('thread_title_')); 

$data = $node->nodeValue; 

var_dump($t, $title, $data); 

:

string(5) "XXXXX" 
string(3) "XXX" 
string(8) "DATADATA" 
3

에 한번 사용 :

다음
$html = <<<EOT 

<html> 
Some html 
<a class="title" href="showthread.php?t=XXXXX" id="thread_title_XXX">DATADATA</a> 
</html> 

EOT; 

$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//a[starts-with(@href, "showthread.php")]') as $node) { 
    // ... 
} 

substr, strposparse_str를 사용하여 데이터를 추출

$parsed_str = '<a class="title" href="showthread.php?t=45343" id="thread_title_XXX">DATADATA</a><a class="title" href="showthread.php?t=466666" id="thread_title_XXX">DATADATA</a> fasdfasdfsdfasd gfgfkgbc 04034kgs <fdfd> dfs</fdfa> <a class="title" href="showthread.php?t=7777" id="thread_title_XXX">DATADATA</a>'; 
preg_match_all("/.*?\?t\=([\d]{2,12}).*?/", $parsed_str, $result); 
print_r($result); 
관련 문제