php - PHP 简单 Dom、正则表达式替换和自动增加变量
问题描述
我正在抓取一个带有如下表格内容的页面:
<table border="1" style="width:100%;" cellspacing="0" cellpadding="3">
<tr class="stats-section">
<td colspan="99">Scoring</td>
</tr>
<tr class="stats-section">
<td colspan="99">2nd Period</td>
</tr>
<tr class="hscore">
<td>UMD</td>
<td>4×4</td>
<td>
Kobe Roth (1)</td>
<td> Noah Cates, Casey Gilling </td>
<td align="right">12:35</td>
</tr>
<tr class="vscore">
<td>BSU</td>
<td>4×4</td>
<td>
Alex Ierullo (1)</td>
<td> Kyle Looft </td>
<td align="right">13:06</td>
</tr>
<tr class="stats-section">
<td colspan="99">3rd Period</td>
</tr>
<tr class="hscore">
<td>UMD</td>
<td></td>
<td>
Blake Biondi (1)</td>
<td> Quinn Olson </td>
<td align="right">10:10</td>
</tr>
</table>
我想匹配 <tr class="hscore" 和 <tr class="vscore 并将它们更改为以下内容:
<tr class="hscore">
<td>#1 UMD</td> <!--added #1 -->
...
<tr class="vscore">
<td>#2 BSU</td> <!-- added #2 -->
...
</tr></table>
我不知道每个 hscore 或 vscore 条目的顺序是什么,甚至不知道有多少。我需要在每次匹配时自动增加一个变量 ($i++;) 以回显 #1 和 #2。正则表达式是我最好的选择吗?也许 str_replace 或者 Simple Dom 和 foreach 更好?
我想不出在每场比赛中添加到 $i 变量的方法。
解决方案
使用 xpath。
$xml = simplexml_load_string($html);
$trs = $xml->xpath("//tr[@class='hscore']");
$i = 1;
foreach ($trs as $tr) {
$tr->td[0] = "#$i ".$tr->td[0];
++$i;
}
$trs = $xml->xpath("//tr[@class='vscore']");
$i = 1;
foreach ($trs as $tr) {
$tr->td[0] = "#$i ".$tr->td[0];
++$i;
}
echo '<pre>' . htmlentities($xml->asXML()) . '<?pre>';
给
<?xml version="1.0"?>
<table border="1" style="width:100%;" cellspacing="0" cellpadding="3">
<tr class="stats-section">
<td colspan="99">Scoring</td>
</tr>
<tr class="stats-section">
<td colspan="99">2nd Period</td>
</tr>
<tr class="hscore">
<td>#1 UMD</td>
<td>4×4</td>
<td>
Kobe Roth (1)</td>
<td> Noah Cates, Casey Gilling </td>
<td align="right">12:35</td>
</tr>
<tr class="vscore">
<td>#1 BSU</td>
<td>4×4</td>
<td>
Alex Ierullo (1)</td>
<td> Kyle Looft </td>
<td align="right">13:06</td>
</tr>
<tr class="stats-section">
<td colspan="99">3rd Period</td>
</tr>
<tr class="hscore">
<td>#2 UMD</td>
<td/>
<td>
Blake Biondi (1)</td>
<td> Quinn Olson </td>
<td align="right">10:10</td>
</tr>
</table>
推荐阅读
- javascript - HTML 中奇怪的模糊文本(画布和 svg)
- java - 如何在我的网站上放置一个服务器类,以便我的客户端类可以从不同的计算机与其通信?
- python - _queryDescriptors.type() == trainDescType 使用 BoW of ORB 特征训练 SVM 错误
- python - 当我使用多个“if”循环时,为什么它一直说“语法错误”?
- javascript - 没有通过 jquery flot 生成的图形
- wordpress - Wordpress 中的 React 应用程序:在 /my-react-app 之后忽略 url 组件
- visual-studio-code - ES6 代码上的 VS Code Mocha 调试错误
- bootstrap-4 - 在 bootstrap4 列内嵌套 3 列的问题
- c# - 如何验证我是否订阅并执行操作?在硒 C#
- android - 由于自己的应用程序参数,使用谷歌助手进行 GET/POST 调用