2010-06-24 6 views
2

지난 두 시간 동안 나는 정규식으로 장난하고 있었다. 감히 내 손을 얹어 본 적이 없으니 나랑 벗겨주세요.preg_match_all 질문

Basicly 내가 내가 여기까지 해낸 다음 소스

<random htmlcode here> 
<td style="BORDER-RIGHT-STYLE:none;"> 
     <a id="dgWachtlijstFGI_ctl03_hlVolnaam" title="Klant wijzigen" class="wl" href="javascript: Pop(600,860,'klantwijzig','FrmKlant.aspx','? Wijzig=true&amp;lcSchermTitel=&amp;zoekPK=+++140+12++8',false,true); ">FIRST LINE A</a> 
     (SECOND LINE A)<br> 
     THIRD LINE A  </td> 
<random htmlcode here> 
<td style="BORDER-RIGHT-STYLE:none;"> 
     <a id="dgWachtlijstFGI_ctl04_hlVolnaam" title="Klant wijzigen" class="wl" href="javascript: Pop(600,860,'klantwijzig','FrmKlant.aspx','?Wijzig=true&amp;lcSchermTitel=&amp;zoekPK=+++140+12++8',false,true); ">FIRST LINE B</a> 
     (SECOND LINE B)<br> 
     THIRD LINE B  </td> 
<random htmlcode here> 

에서 몇 가지 정보를 얻을 노력하고있어 다음 (rubular.com 덕분에) 실제로

<?php $bestand = 'input.htm'; 
$fd = fopen($bestand,"r"); 
$message = fread($fd, filesize ($bestand)); 
$regexp = "FrmKlant.aspx.*\">(.*)<\/a>\s(.*)<br>\s(.*)\s\s(.*)"; 
if (preg_match_all("#$regexp#siU", $message, $matches)) 
{ 
print_r($matches); 
}? 
> 

이있다 다차원 배열에 필요한 첫 번째 및 두 번째 줄을 넣을 것으로 보인다. 지금까지는 다차원 배열이 필요하기 때문에 지금까지는 그렇게 좋았습니다. 그러나 세 번째 줄을 캡처하지 않는 것 같습니다. 그리고 어떻게 든 배열을 생성 [4]

[1] => Array ([0] => FIRST LINE A [1] => FIRST LINE B) 
[2] => Array ([0] => (SECOND LINE A) [1] => (SECOND LINE B)) 
[3] => Array ([0] => [1] =>) [4] => Array ([0] => [1] =>) 

은 내가 무엇을 찾고있어 이것이다 : 당신이 눈치 챘을 수도로

[0] => Array ([0] => FIRST LINE A [1] => FIRST LINE B) 
[1] => Array ([0] => (SECOND LINE A) [1] => (SECOND LINE B)) 
[2] => Array ([0] => THIRD LINE A [1] => THIRD LINE B)) 

는, 내가 잃었어요! 어떤 도움이라도 대단히 감사하겠습니다.

+0

를 읽으려면 파일의 전체 내용은 http://php.net/manual/en/function.file-get-contents.php –

+0

권을보십시오. 우리가 몇 번이나 말을 하던지 상관 없어요. 그들이 계속 묻고 있죠? ** 정규식을 사용하여 html을 구문 분석하지 마십시오 ** – mpen

답변

0
$regexp = "FrmKlant.aspx.*\">(.*)<\/a>\s(.*)<br>\s(.*)\s\s(.*)</td>"; 
0

정규 표현식을 사용하여 HTML/XML에서 정보를 추출하고 추출하는 것은 좋지 않습니다. 그들은 중첩 된 구조를 처리하기에 적합한 renot입니다. "임의의 html"부분이 충분히 악의적 인 경우 시도 할 수있는 모든 작업이 끔찍하게 중단 될 수 있으므로 html을 잘 제어 할 수있는 경우에만 사용하십시오.

대신 파서를 사용해보십시오.

3

사용 PHP의 DOM 파서

불완전 예,하지만 얻을 수있는 무언가 (구글, 그래도 나를 http://simplehtmldom.sourceforge.net/, 나는 그것을 시도하지 않은 발견) 당신은 시작 :

$dom = new DOMDocument(); 
$dom->loadHTML($yourHtmlDocument); 

$xPath = new DOMXPath($dom); 
$elements = $xPath->query('\\random\td\a'); // Or whatever your real path would be 

foreach($elements as $node) { 
    echo $node->nodeValue; 
} 

By the way, look at this.

관련 문제