我的数据包含很多次:
<td width="183">//I want to find what's here</td>
此td
适用于此网站中的每个项目,如何获取每个td
的内容?
答案 0 :(得分:3)
通常最好将DOMDocument用于所有HTML / XML解析:
$doc = new DomDocument();
$doc->loadHTML( '<html>...</html>' );
foreach( $dom->getElementsByTagName( 'td' ) as $node )
{
echo $node->nodeValue;
}
要获得一个宽度=“183”的TD,您可以使用DomXPath
$xpath = new DOMXpath($dom);
$elements = $xpath->query("*/td[@width='183']");
foreach( $elements as $node )
{
echo $node->nodeValue;
}
答案 1 :(得分:1)
好吧,最好不要使用preg_match ...更好用:
php > $xml = new SimpleXmlElement('<root><td width="183">A</td><td width="182">B</td><td width="181">C</td></root>');
php > foreach($xml->xpath('//td[@width=183]') as $td) echo (string)$td,"\n";
A
或类似。
如果你绝对必须......:
php > preg_match_all('/<td width="183">(.*?)<\\/td>/', '<root><td width="183">A</td><td width="182">B</td><td width="181">C</td></root>', $matches);
php > var_dump($matches);
array(2) {
[0]=>
array(1) {
[0]=>
string(22) "<td width="183">A</td>"
}
[1]=>
array(1) {
[0]=>
string(1) "A"
}
}
无论如何......我告诉过你,正则表达式的方法很容易被打破,不推荐。
编辑:我修复了“只有183”部分 - 从一开始我就不清楚了。答案 2 :(得分:1)
使用preg_match_all()并检查此示例:
<?php
// The \\2 is an example of backreferencing. This tells pcre that
// it must match the second set of parentheses in the regular expression
// itself, which would be the ([\w]+) in this case. The extra backslash is
// required because the string is in double quotes.
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo "matched: " . $val[0] . "\n";
echo "part 1: " . $val[1] . "\n";
echo "part 2: " . $val[2] . "\n";
echo "part 3: " . $val[3] . "\n";
echo "part 4: " . $val[4] . "\n\n";
}
?>
以上示例将输出:
匹配:粗体文字
第1部分:<b>
第2部分:b
第3部分:粗体文字
第4部分:</b>
匹配:点击我
第1部分:<a href=howdy.html>
第2部分:a
第3部分:点击我
第4部分:</a>
你可以通过$ echo $ val [3]来获取html标签内的内容。我从这个链接得到了例子。