@Warog

Как получить значение из тега?

Нужно достать значение параметра из тега.
К примеру:

<post id = x1>
//неизвестное кол-во записей (тегов и т.д.)
<put id=y2 max=MX1>
//неизвестное кол-во записей (тегов и т.д.)
</post>
<post id = x2>
//неизвестное кол-во записей (тегов и т.д.)
<put id=y2 max=MX2>
//неизвестное кол-во записей (тегов и т.д.)
</post>


Нужно получить значение параметра max, которое находиться в теге post с id = x2.
Пробовал сделать с помощью "назад смотрящее" и "вперед смотрящее", но из-за того, что "назад смотрящее" имеет ограниченную длину - ничего не получилось.
Как это можно сделать?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
@forspamonly2
матчить регэкспами иерархические структуры довольно муторно, и далеко не каждый регэксповый движок рекурсивные регэкспы умеет. предполагаю что в вашем случае эти тэги post вложенными не бывают.

самый простой способ - это заматчить в два приёма: сначала простейшим регэкспом вытащить один блок с постом, а потом таким же примитивным регэкспом в вытащенной части найти первый подходящий атрибут.

по сравнению с одним хитрым регэкспом, который делает всё сразу, это и быстрее работать будет, и намного проще/понятнее для тех, кому этот код придётся поддерживать.

а если всё-таки нужен именно один регэксп, то он может выглядеть примерно так:

/<post id = x1>(?:.(?!\/post>))*?max=(.*?)>/s

разумеется это упрощённый пример, вам придётся ещё как минимум обрабатывать другие тэги и атрибуты, whitespaces и так далее. но вон то место, где нежадно матчится конструкция с noncapturing group в которой точка с negative lookahead - это наверное и есть то, о чём вы спрашивали.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы