[PHP-users 28983] Re: 特定タグの文字を抽出するには
egis@csc.jp
egis @ csc.jp
2006年 4月 12日 (水) 00:27:53 JST
いわせです。
やってみました。ちとみにくいですがご勘弁をm(__)m
--- ソース ----------------------------------------------
<?php
// サンプルHTML文字列
$html = <<<HTML
<html lang='ja'>
<head>
<title>てすと</tiltle>
</head>
<body>
<h1>てすと</h1>
<table border='1'>
<tr>
<td nowrap>
2006-2-4
</td>
<td>
芸能人A
</td>
<td><a href="/hoge/020492">題名A</a></td>
<td>50 MB</td>
<td>
<span>
<img border="0" src="http://hoge.com/hoge.gif"></span>
</td>
<td style="color: blue;"> </td>
</tr>
<tr>
<td nowrap>
2006-2-8
</td>
<td>
芸能人B
</td>
<td><a href="/hoge/020492">題名B</a></td>
<td>80 MB</td>
<td>
<span>
<img border="0" src="http://hoge.com/hoge.gif"></span>
</td>
<td style="color: blue;"> </td>
</tr>
<tr>
<td nowrap>
2006-2-8
</td>
<td>
芸能人-3
</td>
<td><a href="/hoge/020492">題名3</a></td>
<td>80 MB</td>
<td>
<span>
<img border="0" src="http://hoge.com/hoge.gif"></span>
</td>
<td style="color: blue;"> </td>
</tr>
</table>
<hr />
</body>
</html>
HTML;
// ここから解析
$result = array();
if
(preg_match_all("!<tr[^>]*>[^<]*<td[^>]*>.*?</td>[^<]*<td[^>]*>(.*?)</td>[^<]*<td[^>]*>(.*?)</td>[^<]*<td[^>]*>.*?</td>[^<]*</tr>!s",
$html, $matches)) {
$i = 0;
foreach ($matches[1] as $key) {
$key = trim(str_replace(' ', '', $key));
$value = trim(preg_replace("/<\/?[^>]*>/", '', $matches[2][$i]));
$result[$key] = $value;
++$i;
}
}
// 結果表示
echo "<pre>";
print_r($result);
echo "</pre>";
?>
--- 結果 ----------------------------------------------
Array
(
[芸能人A] => 題名A
[芸能人B] => 題名B
[芸能人-3] => 題名3
)
PHP-users メーリングリストの案内