正则表达式仅使用特定属性选择标记 TD


regex select tag td only with specific property

所以我有这个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>';

我想在标签<td> data-date属性中获取日期,该属性没有属性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);

但是我使用的正则表达式仍然与具有属性class="green"的标签<td>匹配。 既然我想排除主题,正确的正则表达式是什么?

需要您的建议,感谢您的帮助。

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

试试这个。请参阅演示。

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

我试试这个:

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

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

对不起我的英语