preg_match_all故障排除[重复]

问题描述 投票:-1回答:1

我继承了一段突然无法正常工作的代码。它正在尝试使用正则表达式来匹配HTML内容中的各种数据。我不确定这是因为HTML内容中的间距最近已更改,还是存在较大的问题。我可以在单个数据上设置较小的匹配项,但我宁愿将其全部保留在一个preg_match_all调用中。

这里是所讨论代码的示例,以及用于显示其执行情况的沙箱链接。

http://sandbox.onlinephpfunctions.com/code/2ebb3707a5d8cd5871005b4e77076cd230a8abca

$html_content = '<tr>
                <td class="">

                    <span class="new">1111</span>
                </td>
                <td data-order="title1"><a href="test.php?id=1111">title1</a></td>
                <td data-order="20190917000000">09/2019</td>
                <td data-order="1">$1</td>
                <td>02/18/2020</td>
            </tr>

            <tr>
                <td class="">

                    <span class="new">2222</span>
                </td>
                <td data-order="title2"><a href="test.php?id=2222">title2</a></td>
                <td data-order="20190917000000">09/2019</td>
                <td data-order="2">$2</td>
                <td>01/13/2020</td>
            </tr>

            <tr>
                <td class="">

                    <span class="new">3333</span>
                </td>
                <td data-order="title3"><a href="test.php?id=3333">title3</a></td>
                <td data-order="20190917000000">09/2019</td>
                <td data-order="5">$5</td>
                <td>01/13/2020</td>
            </tr>';

$content_array = array();   
preg_match_all('%>(\d+)</span>\s+</td>\s+<td data-order=".+?"><a href="(.+?)">.+?</a></td>\s+<td data-order="(\d+)000000">\d+/\d+</td>\s+<td data-order="\d+">\$\d+</td>\s+<td>(\d+/\d+/\d+)</td>\s+<td>(\d+/\d+/\d+)</td>%', $html_content, $content_array);

print_r($content_array);
php regex preg-match-all
1个回答
1
投票

正则表达式期望2个单元格的末尾有日期:

<td>(\d+/\d+/\d+)</td>\s+<td>(\d+/\d+/\d+)</td>

您只有一个:

<td>01/13/2020</td>

如果您从正则表达式中删除多余的日期单元格,则它与之匹配:

>(\d+)</span>\s+</td>\s+<td data-order=".+?"><a href="(.+?)">.+?</a></td>\s+<td data-order="(\d+)000000">\d+/\d+</td>\s+<td data-order="\d+">\$\d+</td>\s+<td>(\d+/\d+/\d+)</td>
© www.soinside.com 2019 - 2024. All rights reserved.