正则表达式选择标记td仅具有特定属性

时间:2014-12-26 09:23:27

标签: php regex

所以我有这个html表:

$table = '<table cellpadding="0" cellspacing="0" class="calendar">
    <tr>
        <th>Sun</th>
        <th>Mon</th>
        <th>Tue</th>
        <th>Wed</th>
        <th>Thu</th>
        <th>Fri</th>
        <th>Sat</th>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td data-date="12/01/2014">
            <div class="wrapper">
                <div class="day">1</div>
            </div>
        </td>
        <td data-date="12/02/2014">
            <div class="wrapper">
                <div class="day">2</div>
            </div>
        </td>
        <td data-date="12/03/2014">
            <div class="wrapper">
                <div class="day">3</div>
            </div>
        </td>
        <td data-date="12/04/2014" class="green">
            <div class="wrapper">
                <div class="day">4</div>
            </div>
        </td>
        <td data-date="12/05/2014" class="green">
            <div class="wrapper">
                <div class="day">5</div>
            </div>
        </td>
        <td data-date="12/06/2014" class="green">
            <div class="wrapper">
                <div class="day">6</div>
            </div>
        </td>
    </tr>
    <tr>
        <td data-date="12/07/2014" class="green">
            <div class="wrapper">
                <div class="day">7</div>
            </div>
        </td>
        <td data-date="12/08/2014" class="green">
            <div class="wrapper">
                <div class="day">8</div>
            </div>
        </td>
        <td data-date="12/09/2014" class="green">
            <div class="wrapper">
                <div class="day">9</div>
            </div>
        </td>
        <td data-date="12/10/2014" class="green">
            <div class="wrapper">
                <div class="day">10</div>
            </div>
        </td>
        <td data-date="12/11/2014" class="green">
            <div class="wrapper">
                <div class="day">11</div>
            </div>
        </td>
        <td data-date="12/12/2014">
            <div class="wrapper">
                <div class="day">12</div>
            </div>
        </td>
        <td data-date="12/13/2014">
            <div class="wrapper">
                <div class="day">13</div>
            </div>
        </td>
    </tr>
</table>';

我想在标记为data-date的{​​{1}}属性中找到没有属性<td>的日期。预期的有效结果是:

class="green"

(他们没有财产12/01/2014 12/02/2014 12/03/2014 12/12/2014 12/13/2014

这是我的代码:

class="green"

然而,我使用的正则表达式仍与具有属性preg_match_all('/<td[^>]*data-date="(.*?)">(.*?)<\/td>/', $table, $tag, PREG_PATTERN_ORDER); print_r($tag); 的标记<td>匹配。既然我想排除主题,那么正确的正则表达式是什么?

需要你的建议,谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

<td[^>]*data-date="[^"]*"(?:(?!class="green"|>).)*>(.*?)<\/td>

试试这个。看看演示。

https://regex101.com/r/dU7oN5/9

答案 1 :(得分:0)

我试试这个:

/<td[^>]*data-date="([0-9\/]+)">(.*?)<\/td>/s 

看起来它完成了这项工作, 使用https://fr.functions-online.com/preg_match_all.html测试正则表达式;)

对不起我的英文