我正在尝试从以下来源获取一些信息:
<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&lcSchermTitel=&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&lcSchermTitel=&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);
}?
>
这实际上似乎把我需要的第一行和第二行放在一个多维数组中。到目前为止一切都那么好,因为我想要一个多维数组。 但是,它似乎没有捕获第3行。并以某种方式它创建数组[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 :(得分:5)
使用PHP的DOM解析器
不完整的示例,但有些东西可以帮助您入门:
$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;
}
答案 1 :(得分:0)
$regexp = "FrmKlant.aspx.*\">(.*)<\/a>\s(.*)<br>\s(.*)\s\s(.*)</td>";
答案 2 :(得分:0)
尝试使用正则表达式从HTML / XML中提取信息通常不是一个好主意。它们非常适合处理嵌套结构。 如果你的“随机html”部分足够邪恶,那么你可以尝试的一切都会非常糟糕,所以只有在对html有很好的控制权时才使用它们。
尝试使用解析器。 (谷歌找到了我http://simplehtmldom.sourceforge.net/,我还没试过,但是)