У меня есть строка вроде:
<tr><td>abc</td><td style="any" class="marked">dfg</td><td>hij</td></tr>
и я пытаюсь получить отмеченный тег td таким регулярным выражением:
/<td.*class="marked.*<\/td>/si
но получая это:
<td>abc</td><td style="any" class="marked">dfg</td><td>hij</td>
Как мне изменить регулярное выражение для получения такой строки?
<td style="any" class="marked">dfg</td>
У вас есть два вопроса:
class="marked"
связано с тем же тегом, что и <td
в начале выражения..*<\/td>
в конце является жадным и будет полностью соответствовать последнему закрытию </td>
.Этот шаблон будет касаться обоих этих вопросов:
/<td[^>]+class="marked">.*?<\/td>/si
class="foo marked"
или по ряду других причин, если HTML не очень похож на то, что было в вашем примере.
.*
жадный и будет соответствовать как можно больше.
.*?
ленив и будет соответствовать как можно меньше.
tl; dr: use .*?
вместо.
Тем не менее, регулярное выражение не является парсером HTML, но мы прошли через это много раз, прежде чем