3

您好,感谢您查看我的问题。我需要从 HTML 片段中获取一些数据。这个来源是一个受信任/结构化的来源,所以我认为在这个 HTML 中使用正则表达式是可以的。我想 php 中的 Dom 和其他高级功能是一种矫枉过正。

这是 HTML 片段的格式。

<div id="d-container">
  <div id="row-custom_1">
     <div class="label">Type</div>
     <div class="content">John Smith</div>
     <div class="clear"></div>
  </div>
</div>

在上面,请注意前 2 个 DIV 标签设置了 ID。可能有几个 row-custom_1 之类的 div 标签,所以我需要转义它们。

我实际上在正则表达式方面很差,所以我期待你的帮助,从上面的 html 片段中获取 John Smith。

可能是这样的

<div * id="row-custom_1" * > * <div * class="content" * >GRAB THIS </div>

但我不知道如何在正则表达式中做到这一点。John Smith 部分肯定不会包含任何 html。它来自一个受信任的来源,它剥离了所有 html 并以上述格式提供数据。

我可以理解,无论如何,正则表达式都不是处理 HTML 的好主意。非常感谢您提供的任何帮助。

30 分钟后编辑:许多很棒的人建议使用 HTML 解析器,所以我这样做了;像魅力一样工作。因此,如果有人带着类似的问题来到这里,作为愚蠢的问题作者,我建议使用 DOM 来完成这项工作。

4

1 回答 1

5

这是一个简单的基于 DOM 的代码,用于从给定的 HTML 中获取您的值:

$html = <<< EOF
<div id="d-container">
  <div id="row-custom_1">
     <div class="label">Type</div>
     <div class="content">John Smith</div>
     <div class="clear"></div>
  </div>
</div>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//div[@id='d-container']
         /div[@id='row-custom_1']/div[@class='content']/text())"); 
echo "User Name: [$value]\n"; // prints your user name

输出:

User Name: [John Smith]
于 2012-04-27T13:50:45.120 回答