如何仅将表行中的内容作为正则表达式中的键/值对

时间:2017-02-25 07:56:33

标签: php regex html-table

我有这张桌子:

<?php 
$a ="<table class='table table-condensed'>
<tr>
<td>Monthely rent</td>
<td><strong>Fr. 1'950. </strong></td>
</tr>

<tr>
<td>Rooms(s)</td>
<td><strong>3</strong></td>
</tr>

<tr>
<td>Surface</td>
<td><strong>93m2</strong></td>

</tr>

<tr>
<td>Date of Contract</td>
<td><strong>01.04.17</strong></td>
</tr>

</table>

我需要的是将<td><tr>的值作为键值对,如下所示:

monthly rent => Fr. 1'950. 
Rooms(s) => 3
Surface => 93m2
Date of Contract => 01.04.17;

所以,远远只有这段代码会返回一些接近我需要的结果但不像我期望的格式

preg_match_all("/<td>.*/", $a, $matches);

我试图在此找到任何改进。

1 个答案:

答案 0 :(得分:1)

您可以使用以下 regex 将表格行中的内容作为键/值对获取:

regex to get keys  >>  (?<=<td>)(?!<strong>).*?(?=<\/td>)
   . . .   values  >>  (?<=<strong>).*?(?=<\/strong>)

请参阅demo

<强> PHP

<?php
$re = '/(?<=<strong>).*?(?=<\/strong>)/';
$str = '<table class=\'table table-condensed\'>
        <tr>
        <td>Monthly rent</td>
        <td><strong>Fr. 1\'950. </strong></td>
        </tr>
        <tr>
        <td>Rooms(s)</td>
        <td><strong>3</strong></td>
        </tr>
        <tr>
        <td>Surface</td>
        <td><strong>93m2</strong></td>
        </tr>
        <tr>
        <td>Date of Contract</td>
        <td><strong>01.04.17</strong></td>
        </tr>
        </table>';
preg_match_all($re, $str, $matches);
print_r($matches);
?>