PHP,我如何使用preg_match?

时间:2011-07-25 16:36:42

标签: php

  

可能重复:
  Best methods to parse HTML with PHP

我的数据包含很多次:

<td width="183">//I want to find what's here</td>

td适用于此网站中的每个项目,如何获取每个td的内容?

3 个答案:

答案 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标签内的内容。我从这个链接得到了例子。

http://www.php.net/manual/en/function.preg-match-all.php